将上下文菜单项添加到 Chrome 扩展程序的浏览器操作按钮 (Manifest v3)

Tak*_*ama 3 google-chrome contextmenu google-chrome-extension chrome-extension-manifest-v3

我知道清单 v2 的答案:将上下文菜单项添加到 Chrome 扩展程序的浏览器操作按钮

在将清单从 v2 迁移到 v3 之前,它一直工作正常。

我目前的manifest.json

{
  "manifest_version": 3,
  "version": "0.1.1",
  "background": {
    "service_worker": "background.js"
  },
  "action": {
    "default_popup": "popup.html"
  },
  "content_scripts": [
    {
      "all_frames": false,
      "matches": ["http://*/*", "https://*/*"],
      "js": ["content.js"]
    }
  ],
  "permissions": ["contextMenus"],
   ...
}
Run Code Online (Sandbox Code Playgroud)

现在,这不会向我的扩展程序的浏览器操作按钮添加上下文菜单项:

chrome.contextMenus.create({
  id: 'foo',
  title: 'first',
  contexts: ['browser_action'],
  onclick: function () {
    alert('first')
  }
})
Run Code Online (Sandbox Code Playgroud)

我检查'selection'上下文是否正确地将上下文菜单添加到网页上的选定文本中。从 v2 迁移到 v3 需要做什么吗?

Tak*_*ama 24

我自己找到了解决方案。上下文应该'action'代替'browser_action'. 看起来onclick财产已经被弃用了。所以,它应该是这样的:

chrome.contextMenus.create({
  id: 'foo',
  title: 'first',
  contexts: ['action']
})

function contextClick(info, tab) {
  const { menuItemId } = info

  if (menuItemId === 'foo') {
    // do something
  }
}

chrome.contextMenus.onClicked.addListener(contextClick)
Run Code Online (Sandbox Code Playgroud)