我的扩展在特定网站中工作,并且我希望用户知道它的工作时间。 在清单我的内容脚本,我指定的特定页面,当扩展的内容脚本处于活动状态时设置图标
我如何改变我的扩展图标时的内容脚本是积极?
(编辑从作者的评论)
虽然我的应用程序将特定页面上的工作,我仍然希望用户能够查看弹出。
我的扩展在特定网站中工作,并且我希望用户知道它的工作时间。 在清单我的内容脚本,我指定的特定页面,当扩展的内容脚本处于活动状态时设置图标
我如何改变我的扩展图标时的内容脚本是积极?
(编辑从作者的评论)
虽然我的应用程序将特定页面上的工作,我仍然希望用户能够查看弹出。
我为我的扩展Grooveshark Control实施。这很简单。我将脚本注入到了我需要的页面中,并从该注入的脚本中周期性地用一些数据调用我的扩展。
// content.js
setInterval(dataCollector, 1000)
function dataCollector() {
data = {} // collect something from page
chrome.extension.sendRequest(data);
}
而且在我的分机我只是听为...
// background.js
chrome.extension.onRequest.addListener(function(request) {
chrome.browserAction.setIcon(...)
})
但有了这个,你可以有一些麻烦。例如,某人可以禁用并再次启用您的扩展。然后,content.js
也注册responseCallback
,您将删除该区间。因为那样会有两个请求。这个问题主要是在开发过程中,当你需要重新加载你的扩展。
另一件事是,用户可以与您的网页关闭标签,现在你需要再次修改你的图标。对于您需要使用其他听众在background.js
脚本:
// background.js
chrome.tabs.onRemoved.addListener(function(tabId, removeInfo) {
// check if your page is still there
// if not, change icon
})
的Grooveshark控制的代码是在GitHub上,这样你就可以检查出来:
Hope th at你正在寻找的东西。
尽管意识形态正确,但这不是一个好的答案,因为它没有回答OP真正具有的问题。如果有人可以提供一个强大的解决方案来更改特定页面的浏览器操作图标,那将是值得欢迎的。
根据Chrome用户界面指南,如果扩展程序仅适用于特定网站,则应使用Page Action。
最直接的解决方案是从内容脚本将消息发送给后台脚本,为特定的标签页面的动作,并报告点击回标签:
// content.js
chrome.runtime.sendMessage({showAction : true});
chrome.runtime.onMessage.addListener(
function(message, sender, sendResponse) {
if(message.actionClicked) {
/* Do stuff */
}
}
);
// background.js
chrome.runtime.onMessage.addListener(
function(message, sender, sendResponse) {
if(message.showAction) {
chrome.pageAction.show(sender.tab.id);
}
}
);
chrome.pageAction.onClicked.addListener(function(tab) {
chrome.tabs.sendMessage(tab.id, {actionClicked : true});
});
您需要将必需的字段添加到清单,但这是它的要点。
你也可以考虑另一条路线:不是每次注入脚本,检测要注入与declarativeContent
API显示页面操作页面,并点击程序注入。这样可以节省一些资源,但如果您需要在页面上进行准备工作,则不适用。
感谢您的回复,抱歉不提这一点 - 虽然我的应用程序将在特定页面上工作,但我仍然希望用户能够查看弹出窗口,如果该应用程序是页面操作,这可能吗? – ishayle 2014-09-26 04:07:29
不,你可能会想坚持'browserAction'。您仍然可以从内容脚本发送消息,并在后台脚本中使用'chrome.browserAction.setIcon({tabId:sender.tab.id,path:“yourSpecialIcon.png”})' – Xan 2014-09-26 09:38:49
嗯,但那么有一个航行的问题。 – Xan 2014-09-26 09:40:34