我的扩展仅适用于少数网站。因此,它具有工具栏上显示的正常图标(浏览器操作),当用户打开支持的网站时,图标应更改为另一个图标以指示它。当用户切换标签时,应该发生同样的事情。我尝试设置后台页面并将消息发送到弹出页面,如下所示,
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扩展开发的新手,所以我不确定我在这里做错了什么,不胜感激任何帮助。感谢。
答案 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"]
}
]