我尝试将一个上下文菜单项添加到Chrome应用,但它根本没有显示。我读过的所有内容似乎表明我在这里做了正确的事,但显然我不是。
background.js:
var clickHandler = function(e) {
console.log('testing testing');
}
chrome.contextMenus.create({
"title": "Click Me",
"contexts": ["page", "selection", "image", "link"],
"onclick" : clickHandler
});
的manifest.json:
{
"update_url": "https://clients2.google.com/service/update2/crx",
"name": "Test",
"description": "Test",
"manifest_version": 2,
"version": "3.2.3",
"kiosk_enabled": true,
"icons": {
"128": "icon_128.png",
"16": "icon_16.png"
},
"app": {
"background": {
"scripts": [ "background.js" ],
"persistent": false
}
},
"permissions": [
"http://*/", "https://*/", "webview", "storage", "power", "alwaysOnTopWindows", "idle", "contextMenus"
]
}
没有记录错误或类似的错误。该项目根本没有显示出来。我在这里缺少什么?
答案 0 :(得分:4)
您错过了contextMenu
文档中的small note:
功能(可选)
注册一个监听器onclick
单击菜单项时将回调的函数。事件页面不能使用此;相反,他们应该为chrome.contextMenus.onClicked
您的确有Event page("persistent": false
),因此适用于您。
Chrome会卸载该页面,对clickHandler
的引用可能会丢失。相反,事件页面机制确保如果您使用addListener
注册了一个事件,将再次加载该页面,再次应用addListener
,然后执行您的侦听器。
所以:
var clickHandler = function(e) {
console.log('testing testing');
}
chrome.contextMenus.create({
"title": "Click Me",
"contexts": ["page", "selection", "image", "link"]
});
// Must be synchronously called on event page load,
// for instance in the top level code
chrome.contextMenus.onClicked.addListener(clickHandler);