Chrome扩展程序:如何让chrome.browserAction.setIcon适用于所有标签?

时间:2017-03-23 14:13:00

标签: google-chrome-extension toggle sendmessage

我为修改网页中的网址做了扩展。这个函数本身很简单,工作正常,所以我不解释这个部分。

问题在于浏览器操作图标。我希望图标更改为" 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;。我不知道它们之间有什么区别。无论如何,使用新术语是好的。

根据您对我的问题的标题和提示的建议,我编辑了它,希望它对搜索这些主题的其他用户有所帮助。

0 个答案:

没有答案