我制作了Chrome扩展程序,当您单击图标background.js时,执行内容脚本并从“关闭”图标更改为“打开”图标。
问题是,当我禁用扩展程序,然后重新启用时,内容脚本未加载,但当我希望它默认为“关闭”时,图标仍然显示为“打开”,因此用户知道他们需要重新点击才能激活。
这是我的background.js脚本:
var turnedOff = true;
var loadScript = true;
chrome.runtime.onStartup.addListener(function () {
chrome.browserAction.setIcon({path:"red.png"});
});
chrome.browserAction.onClicked.addListener(function (tabId, changeInfo, tab) {
if (loadScript == true) {
loadScript = false;
chrome.browserAction.setIcon({path:"green.png"});
chrome.tabs.query( {} ,function (tabs) {
for (var i = 0; i < tabs.length; i++) {
chrome.tabs.executeScript(tabs[i].id, {file: "content.js"});
}
});
}
else if (turnedOff == true) {
turnedOff = false;
chrome.browserAction.setIcon({path:"green.png"});
chrome.tabs.query({active: true, currentWindow: true}, function(tabs){
chrome.tabs.sendMessage(tabs[0].id, {action: "On"}, function(response) {});
});
}
else if (turnedOff == false) {
turnedOff = true;
chrome.browserAction.setIcon({path:"red.png"});
chrome.tabs.query({active: true, currentWindow: true}, function(tabs){
chrome.tabs.sendMessage(tabs[0].id, {action: "Off"}, function(response) {});
});
}
});
这是我的manifest.json:
{
"background": {
"scripts": [ "background.js", "jquery-3.1.1.min.js" ],
"persistent": false
},
"browser_action": {
"name" : "hjfdsfhdks"
},
"icons" : {
"16" : "red.png",
"48" : "red.png",
"128" : "red.png"
},
"description": "Replace Facebook color-background posts with Kanye West quotes to match the bold, brazen, attention-grabbing aesthetic.",
"manifest_version": 2,
"name": "Ye'sbook",
"permissions": [ "<all_urls>" ],
"update_url": "https://clients2.google.com/service/update2/crx",
"version": "1.2",
"web_accessible_resources": [ "images/*.png" ]
}
请原谅,如果它看起来不干净,我只是想在重构之前让它工作,并且不熟悉Chrome扩展程序。
值得注意的是:完全关闭Chrome后,background.js会正确重新加载,但不会重新启用。另外,我在后台加载内容脚本而不是使用manifest.json句柄的原因是,我希望此事件在单击时立即发生,而不是仅在页面刷新时加载内容脚本。