我写了一个名为“Word Welter”的Google Chrome扩展程序,它可以显示典型血糖。
此扩展程序使用后台脚本来切换单词加扰和关闭。然而,虽然这适用于网页,但如果用户打开功能然后浏览到其他页面(即点击当前页面中的超链接),则Chrome按钮会返回其初始状态(尽管按钮的工具提示文字说功能仍在开启!)并且加扰功能已关闭。看起来我的内容脚本只执行一次(即执行切换时)。
我希望加扰功能在用户导航到其他页面时保持活动状态,我希望我使用后台脚本可以工作,但显然不是。有谁知道如何解决这个问题?
请注意,在我介绍切换按钮之前,加扰功能正常工作(即,用户将导航到的每个页面)。然而,切换按钮是需要的,因为如果每个页面都经常被扰乱,它会变得烦人!
后台脚本(background.js)如下:
var toggle = false;
chrome.browserAction.onClicked.addListener(function(tab) {
toggle = !toggle;
if(toggle){
chrome.browserAction.setIcon({path: "WordWelterIcon19x19_On.png", tabId:tab.id});
chrome.browserAction.setTitle({title: "Word Welter On"});
chrome.tabs.executeScript(tab.id, {file:"content_script.js"});
}
else{
chrome.browserAction.setIcon({path: "WordWelterIcon19x19_Off.png", tabId:tab.id});
chrome.browserAction.setTitle({title: "Word Welter Off"});
chrome.tabs.executeScript(tab.id, {code:"window.location.reload();"});
}
});
我的manifest.json后台脚本有以下条目:
"background": {
"scripts": ["background.js"]
}
感谢任何帮助。
答案 0 :(得分:0)
我自己找到了这个问题的解决方案。我将代码更改为:
var toggle = false;
var executeContentScript = function() {
chrome.tabs.executeScript({file:"content_script.js", allFrames : true });
};
chrome.browserAction.onClicked.addListener(function(tab) {
toggle = !toggle;
if(toggle){
chrome.browserAction.setIcon({path: "WordWelterIcon19x19_On.png"});
chrome.browserAction.setTitle({title: "Word Welter On"});
executeContentScript();
chrome.tabs.onUpdated.addListener(executeContentScript);
}
else{
chrome.tabs.onUpdated.removeListener(executeContentScript);
chrome.browserAction.setIcon({path: "WordWelterIcon19x19_Off.png"});
chrome.browserAction.setTitle({title: "Word Welter Off"});
chrome.tabs.executeScript({code:"window.location.reload();"});
}
});
修复是添加一个监听器,以便每次更新活动选项卡时都会执行内容脚本;看到电话:
chrome.tabs.onUpdated.addListener(executeContentScript);
通过调用“removeListener”再次切换时,此侦听器未注册:
chrome.tabs.onUpdated.removeListener(executeContentScript);