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

clo*_*ker 2 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
});
Run Code Online (Sandbox Code Playgroud)

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"
    ]
}
Run Code Online (Sandbox Code Playgroud)

没有记录错误或类似的东西。该项目根本不会显示。我在这里想念什么?

Xan*_*Xan 5

您错过了文档中的一条小纸条contextMenu

函数(可选)onclick
单击菜单项时将调用的函数。活动页面无法使用此功能;相反,他们应该为注册一个监听器chrome.contextMenus.onClicked

您确实有一个事件页面"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);
Run Code Online (Sandbox Code Playgroud)

  • 除此之外,API 现在需要将 id 传递给 create 函数。参考:/sf/ask/1837212191/ (2认同)