我为修改网页中的网址做了扩展。这个函数本身很简单,工作正常,所以我不解释这个部分。
问题在于浏览器操作图标。我希望图标更改为" on-icon"或者" off-icon"当我通过单击浏览器操作切换它。到目前为止,它对我的点击响应良好。但是当我刷新网页时,它会自动返回到默认图标,而不是保持打开或关闭状态。
我尝试向内容脚本添加sendMessage行,告诉background.js每次加载页面时刷新图标,但不起作用。
请参阅下面的脚本。有什么问题?
这是background.js:
var toggle = true;
chrome.browserAction.onClicked.addListener(function(tab) {
toggle = !toggle;
if(toggle){
chrome.browserAction.setIcon({path: "on.png", tabId:tab.id});
}
else{
chrome.browserAction.setIcon({path: "off.png", tabId:tab.id});
}
});
chrome.extension.onMessage.addListener(
function (request, sender, sendResponse) {
if (request.cmd == "isiton") {
sendResponse(toggle);
}
});
//The above works fine.
chrome.extension.onMessage.addListener(
function (request, sender, sendResponse) {
if (request.cmd == "refreshicon") {
if(toggle){
chrome.browserAction.setIcon({path: "on.png", tabId:tab.id});
}
else{
chrome.browserAction.setIcon({path: "off.png", tabId:tab.id});
}
}
});
//This part does not work.
这是content.js:
chrome.extension.sendMessage({ cmd: "isiton" }, function (response) {
if (response == true) {
var anchors = document.getElementsByTagName("a");
for (var i = 0; i < anchors.length; i++) {
anchors[i].href = anchors[i].href.replace(/(resume\/showresumedetail\/\?res_id_encode\=[^\&]*)[^\"]*/g, "$1")
}
}
});
//The above works fine.
chrome.extension.sendMessage({ cmd: "refreshicon" });
//This part does not work.
======= 更新 - 这是我的建议后的解决方案:
谢谢Makyen!
我试了一下。是的,问题是我将功能限制在选项卡中。因此,我删除了所有&#34; tabId:tab.id&#34;部分,以便为整个铬窗口而不是单个选项卡设置图标。现在,我对结果非常满意!
我也改变了&#34; chrome.extension&#34; to&#34; chrome.runtime&#34;。我不知道它们之间有什么区别。无论如何,使用新术语是好的。
根据您对我的问题的标题和提示的建议,我编辑了它,希望它对搜索这些主题的其他用户有所帮助。