在标签切换/更改上更新Chrome扩展图标

时间:2015-03-20 16:53:58

标签: javascript google-chrome-extension

我的扩展仅适用于少数网站。因此,它具有工具栏上显示的正常图标(浏览器操作),当用户打开支持的网站时,图标应更改为另一个图标以指示它。当用户切换标签时,应该发生同样的事情。我尝试设置后台页面并将消息发送到弹出页面,如下所示,

background.js

chrome.tabs.onActivated.addListener(function(tabId, changeInfo, tab) {         
  chrome.runtime.sendMessage({msg: 'supported'});
}); 

弹出

chrome.extension.onMessage.addListener(function(message, messageSender, sendResponse) {
  updateIcon();
});

但它不起作用。 updateIcon()函数很好,因为它从弹出页面调用时有效。我是chrome扩展开发的新手,所以我不确定我在这里做错了什么,不胜感激任何帮助。感谢。

1 个答案:

答案 0 :(得分:1)

您可以使用message passing通过内容脚本完成检测,以检测受支持页面上的开关,然后通知后台页面以显示该页面的浏览器操作图标。您的内容脚本应使用chrome.runtime.sendMessage发送消息,后台页面应使用chrome.runtime.onMessage.addListener收听:

我创建了示例代码并测试了它与我合作:

内容脚本:

if(onSupportedPageNeedChangeIcon) {
    // send message to background script
    chrome.runtime.sendMessage({ "newIconPath" : "newicon.png" });
}

背景页面:

chrome.runtime.onMessage.addListener(
    function(request, sender, sendResponse) {
        // read `newIconPath` from request and read `tab.id` from sender
        //alert("good");
        chrome.browserAction.setIcon({
            path: request.newIconPath,
            tabId: sender.tab.id
        });
    });

另请注意在清单中注册内容脚本的代码,如:

"content_scripts": [
    {
      "matches": ["http://www.supportedwebsiteone.com/*", "http://www.supportedwebsitetwo.com/*"],
      "js": ["myscript.js"]
    }
  ]