ウェブページを読み込んだ時に、チェック済みのチェックボッスが存在する場合、その数をアラートウィンドウで表示するFirefox用のアドオン(拡張機能)を作ってみました。
全てのソースコードはgithubにあります。
そのまま使う場合はFirefoxのデバッグモードで一時的なアドオンとして読み込みますが、再起動すると解除されます。
継続的に使うには、Firefoxのアドオン開発者センターでの署名が必要になります。(下記参考サイトを参照して下さい)
仕様について
- 任意のページにアクセスし、拡張機能のツールボタンを押して表示される有効化チェックボックスにチェックを入れると、以降は同じドメインのウェブページがチェック対象になる
- チェック有無の設定情報はブラウザのローカルストレージに保存する
- チェック対象のページ表示時、チェック済みチェックボックスの数をカウントし、1以上の場合はアラートウィンドウを表示する
ソースコード(一部)
メイン
let count = 0;
const elements = document.getElementsByTagName('input');
for (let i = 0; i < elements.length; i++){
if (elements.item(i).type === 'checkbox' && elements.item(i).checked) {
count++;
}
}
if (count > 0) {
let save = browser.storage.local.get(getDomainFromURI(location.href));
save.then((storedInfo) => {
let status = storedInfo[Object.keys(storedInfo)[0]];
if (status) alert(count+' checked checkbox found.');
});
}
function getDomainFromURI(uri) {
let uriobj = new URL(uri);
return uriobj.hostname;
}
checkboxタイプのinputタグの要素を抽出してカウント、URLのドメインが処理対象である(ローカルストレージに、ドメインをキーとする”true”の値が保存されている)場合は、カウント値をアラートウィンドウで表示します。
旧バージョンの名残で、処理対象であるかに関わらず要素のチェックを行っています。(今後のリファクタリングで直すかも)
設定画面
var enableInput = document.querySelector('input');
function getActiveTab() {
return browser.tabs.query({active: true, currentWindow: true});
}
function getDomainFromURI(uri) {
let uriobj = new URL(uri);
return uriobj.hostname;
}
getActiveTab().then((tabs) => {
let save = browser.storage.local.get(getDomainFromURI(tabs[0].url));
save.then((storedInfo) => {
let status = storedInfo[Object.keys(storedInfo)[0]];
if (status) enableInput.checked = true;
});
});
enableInput.onchange = function(e) {
getActiveTab().then((tabs) => {
var checked = e.target.checked;
let settingToStore = {};
settingToStore[getDomainFromURI(tabs[0].url)] = checked;
browser.storage.local.set(settingToStore);
});
}
ブラウザ右上端に配置されるツールボタンを押したときに表示される画面のスクリプトです。(他にHTMLとCSSファイルもあり)
チェックを入れると、アクティブなタブのURLからドメインを取得し、それをキーとしてローカルストレージに設定値trueを書き込みます。
また、(有効で)設定済みのドメインのページを表示した際、チェックボックスにチェックを入れます。
作った経緯
“希望しない場合はチェックを外して下さい”というチェックボックスが配置されているページにおいて、”後になってからチェックを外していなかった”ということに気付くことが度々あるからです。
しかし、個人的には「希望する場合はチェックして下さい」の方がユーザー目線な設計だと思います。
Firefox用以外について
開発者は基本的にFirefoxしか使っていないので、正直作る気が湧いてきません。ただ、おそらくmanifestファイル以外は殆ど変えることなく動作しそうな気がします。