0

Chrome拡張機能にいくつか変更を加えようとしています。拡張機能が値をチェックし、それがtrueの場合は、スクリプトを実行する必要があります。falseの場合、何もしません。私はこのようなものを書きました:

chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
    if(localStorage["statusOfSomething"]){
        chrome.tabs.executeScript(tabId, {file: "file.js" ,runAt:'document_end'});
    }
});

ただし、これはlocalStorage["statusOfSomething"]常にの初期値を取ります。そのため、「onUpdated」のリスナーを登録する非同期関数があります。ただしlocalStorage["statusOfSomething"]、リスナーを登録して、時間の値ではなく、「今」の値を確認する必要があります。

これどうやってするの?

編集:実際に私は2つのことをチェックしようとしていました:

  1. ウェブサイトが拡張機能のサイトリストにある場合
  2. このWebサイトで拡張機能が有効になっている場合

ここで完全な話をします。

いくつかのウェブサイトがあります、私はそれらをbackground.jsファイルで定義しました。まあ言ってみれば; a.com、b.com...など

var sites = [{
    name     : "a",
    wildcard : ["*://a.com/*"],
    js       : "a.js"
},{
    name     : "b",
    wildcard : ["*://b.com/*"],
    js       : "b.js"
}]

サイトのステータスがあります(有効/無効、true / false)localStorageでステータスを保存するのは良かったと思うので、初期値として書き込みますtrue

for(var i = 0; i<sites.length; i++){
    localStorage[sites[i].name] =true;
}

オプションとして; 変更のためにリスナーを追加する必要がありました:

chrome.extension.onMessage.addListener(function(request, sender, sendResponse) {
    if(request.method == "setSite"){
        var name = request.site;
        var status = request.active;

        localStorage[name] = status;
    }
    return true;
});

ユーザーがWebサイトのステータスオプションのチェックボックスをオンにすると、options.jsメッセージが送信されます。

$('#' + name).change(function(){
    var status = $(this).is(':checked');
    chrome.extension.sendMessage({method: "setSite", site: this.id, active: status}, function(response) {
        console.log(response.data);
    });
});

さて、に戻ってbackground.js、タブを更新するたびに、これら2つのことを一緒にチェックする必要があります。1。このWebサイトに興味がありますか?2.今は有効になっていますか?

だから私は書いた:

chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
    if (changeInfo.status === 'complete') {
        var url = tab.url;
        for(var i = 0; i<sites.length; i++){
            var site = sites[i];
            var name = site.name;
            var wildcard = site.wildcard;
            if(localStorage[name] && testUrl(url,wildcard)){
                chrome.tabs.executeScript(tabId, {file: site['js'] ,runAt:'document_end'});
                break;
            }
        }
    }
});

ここで、localStorage[sitename]trueの値を取得します

もっと興味がある場合は、githubバージョン)でコードを見ることができます

4

0 に答える 0