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つのことをチェックしようとしていました:
- ウェブサイトが拡張機能のサイトリストにある場合
- この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の値を取得します