私が今思いつく (簡単でシンプルな) 方法の 1 つは、html5webstorageを使用することです。バックグラウンドまたはポップアップ ページからこのコードを実行しているので、問題ありません。
if(!localStorage.getItem("isAlreadyInjected")){
localStorage['isAlreadyInjected'] = "true";
chrome.browserAction.onClicked.addListener(function callback(tab){chrome.tabs.executeScript(null, {file: "content-script.js"});});}
したがって、ストレージ値「isAlreadyInjected」が存在しない最初の時点で、リスナーが追加されます。その後、ブラウザーを閉じて再度開いても、この値は保存されたままになるため、リスナーは拡張機能に追加されません。
アップデート
バックグラウンド ページは最初に 1 回だけ読み込まれるため、ブラウザ アクションのクリックで再初期化されない変数を保持できます。したがって、その変数を使用して仕事をすることができます。
background.js
var isAlreadyInjected =false;
function isInjected(){
if(!isAlreadyInjected ){
isAlreadyInjected=true;
return false;
}
else
return true;
}
popup.js
var bgpage=chrome.extension.getBackgroundPage();
if(!bgpage.isInjected()){
chrome.browserAction.onClicked.addListener(function callback(tab) {chrome.tabs.executeScript(null, {file: "content-script.js"});});
}
また
var bgpage=chrome.extension.getBackgroundPage();
chrome.browserAction.onClicked.addListener(function callback(tab) {
if(!bgpage.isInjected()){
chrome.tabs.executeScript(null, {file: "content-script.js"});
}});