我正在尝试构建一个虚拟的Chrome扩展程序。我希望它只在特定页面中运行,所以我使用的是Page Action。
假设我希望页面操作在Instagram网站上运行,然后(相应carrierwave-flickr),我需要manifest.json
这样的内容吗?
{
"manifest_version": 2,
"name": "Some name",
"version": "0.0.3",
"description": "Some description",
"content_scripts": [
{
"matches": [
"https://www.instagram.com/*"
],
"js": ["content.js"]
}
],
"page_action": {
"default_icon": "icon.png"
},
"background": {
"scripts": ["background.js"]
}
}
虽然内容脚本只在Instagram页面上运行,但浏览器扩展名不可点击(灰色外观,当我点击大多数选项时无法点击)。
这使得无法在点击扩展按钮时采取行动。在我的background.js
我有:
function click(tab) {
console.log('click from ' + tab);
}
chrome.pageAction.onClicked.addListener(click);
永远不会被召唤。
那么,在点击某些页面时无法采取行动会出现什么问题呢?
注意:我看到了这个问题/答案,但找不到问题/解决方案the docs
答案 0 :(得分:1)
您必须致电pageAction.show
才能启用pageAction按钮(可点击)。
pageAction
documentation说(强调我的):
您分别使用
pageAction.show
和pageAction.hide
方法显示页面操作并显示为灰色。 默认情况下,页面操作显示为灰色。显示时,指定应显示图标的选项卡。图标保持可见,直到选项卡关闭或开始显示不同的URL(例如,因为用户单击链接)。
content_scripts
条目因为您已经拥有一个在您希望启用此功能的页面上运行的内容脚本,所以最简单的方法是让您的内容脚本send a message告诉您的后台脚本webNavigation.onCompleted
1}}该标签的页面操作按钮。
您的内容脚本可能如下所示:
show
您的后台脚本可能类似于:
chrome.runtime.sendMessage({type: showPageAction});
chrome.runtime.onMessage(function(message, sender, sendResponse) {
if(typeof message === 'object' && message.type === 'showPageAction') {
chrome.pageAction.show(sender.tab.id);
}
});
条目如果您没有内容脚本,您可能希望使用tabs.onUpdated
侦听器或https://www.mozilla.org/en-US/firefox/organizations/all/侦听器来侦听选项卡URL中的更改,以确定该页面 - 应显示动作按钮。显然,调用content_scripts
的触发器不一定是当前显示在选项卡中的URL,但这是最常见的。