Chrome扩展程序上下文菜单未显示

时间:2015-03-10 01:42:19

标签: javascript google-chrome-extension

我尝试将一个上下文菜单项添加到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"
    ]
}

没有记录错误或类似的错误。该项目根本没有显示出来。我在这里缺少什么?

1 个答案:

答案 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);