我现在能想到的一种方法(简单易行)是使用html5webstorage。由于您是从后台或弹出页面运行此代码,所以没问题。
if(!localStorage.getItem("isAlreadyInjected")){
localStorage['isAlreadyInjected'] = "true";
chrome.browserAction.onClicked.addListener(function callback(tab){chrome.tabs.executeScript(null, {file: "content-script.js"});});}
因此,第一次当存储值“isAlreadyInjected”不存在时,将添加监听器。之后,即使浏览器关闭并再次打开,此值仍将保持存储,因此不会将侦听器添加到您的扩展程序中。
更新
由于您的背景页面在开始时仅加载一次,因此它可以保留未通过浏览器操作单击重新初始化的变量。因此,您可以使用该变量来完成您的工作!
背景.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"});
}});