我正在尝试开发一个简单的chrome扩展程序,该扩展程序将在几个网站上启用,并在单击时打开另一个页面(在新标签中)。到目前为止,它与Google's tutorial十分相似。
在Google's tips之后,我对该扩展名使用了“仅对少数几个页面有意义”的页面操作,而对于这几个网站,我使用declarativeContent
至ShowPageAction()
(主办)。这可行。在选定的站点中,该图标已启用,单击后将打开新选项卡。在其余站点中,该图标显示为灰色,并且单击该图标时,仅显示该扩展名和菜单(选项,删除扩展名等)。
但是我也想为那些扩展名无效的站点显示一个弹出窗口(只是一个纯HTML解释扩展名在该页面中不起作用以及为什么)。问题在于onClicked事件“ will not fire if the page action has a popup”。因此,为了使扩展程序的主要功能正常工作(单击后在新选项卡中打开新页面),我必须删除manifest.json中的默认弹出窗口,但我不知道如何为网站添加弹出窗口扩展名无效的地方。
这是我现在正在使用的代码。
manifest.json
{
"name": "Getting Started Example",
"version": "1.0",
"description": "Build an Extension!",
"permissions": ["storage", "declarativeContent", "tabs"],
"background": {
"scripts": ["background.js"],
"persistent": false
},
"page_action": {
"default_icon": {
"16": "images/get_started16.png",
"32": "images/get_started32.png",
"48": "images/get_started48.png",
"128": "images/get_started128.png"
}
},
"manifest_version": 2
}
background.js
chrome.declarativeContent.onPageChanged.removeRules(undefined, function() {
chrome.declarativeContent.onPageChanged.addRules([{
conditions: [new chrome.declarativeContent.PageStateMatcher({
pageUrl: {hostEquals: 'developer.chrome.com'},
})
],
actions: [new chrome.declarativeContent.ShowPageAction()]
}]);
});
});
// listen to onClicked event ...
// ... but "This event will not fire if the page action has a popup."
// see https://developer.chrome.com/extensions/pageAction#event-onClicked
chrome.pageAction.onClicked.addListener(function(activeTab) {
var newURL = "http://www.youtube.com/";
chrome.tabs.create({ url: newURL });
});