开发者问题收集

未捕获的类型错误:无法读取未定义的属性(读取‘onClicked’)

2021-09-01
54404

我正在尝试将我的 chrome 纯 JS 扩展迁移到 vuejs 版本。 我所有的纯 JS 版本都可以正常工作。

但是使用 vuejs 时,我在加载扩展时遇到了一个难以理解的错误。

这是我的 manifest.json 和我的 vue.config.js : Manifest :

{
  "manifest_version": 2,
  "name": "__MSG_appName__",
  "version": "2.1.0",
  "homepage_url": "https://*****.*********/",
  "description": "****** Vuejs",
  "default_locale": "fr",
  "permissions": [
    "activeTab",
    "<all_urls>",
    "*://*/*",
    "storage"
  ],
  "icons": {
    "48": "icons/icon-48.png",
    "64": "icons/icon-64.png",
    "128": "icons/icon-128.png"
  },
  "background": {
    "scripts": [
      "js/background.js"
    ],
    "persistent": true
  },
  "browser_action": {
    "default_popup": "popup.html",
    "default_title": "__MSG_appName__",
    "default_icon": {
      "48": "icons/icon-48.png",
      "64": "icons/icon-64.png"
    }
  }
}

vue.config.js :

module.exports = {
  pages: {
    popup: {
      template: "public/browser-extension.html",
      entry: "./src/popup/main.js",
      title: "Popup",
    },
  },
  pluginOptions: {
    browserExtension: {
      componentOptions: {
        background: {
          entry: "src/background.js",
        },
        contentScripts: {
          entries: {
            "content-script": [
              "src/content_scripts/contentScript.js",
              "src/content_scripts/config.js",
              "src/content_scripts/capture.js",
            ],
          },
        },
        permissions: [
          "<all_urls>",
          "activeTab",
          "contextMenus",
          "notifications",
          "storage",
          "identity",
        ],
        browser_action: {},
      },
    },
  },
};

项目正在编译,没有任何问题。 然后我通过指向 /dist 文件夹在浏览器中加载我的扩展。 然后我遇到了错误 Uncaught TypeError: Cannot read properties of undefined (reading 'onClicked') 并且我的扩展显示空白弹出窗口。 以下是导致错误的部分代码:

browser.contextMenus.onClicked.addListener(async (info, tab) => {

当然,我尝试使用“chrome”而不是“browser”,但没有成功……

如能得到任何帮助,我们将不胜感激。 提前谢谢您。

2个回答

我遇到了同样的问题, 发现你需要将 "action": { 添加到你的 manifest.json。

{
  "manifest_version": 2,
  "name": "__MSG_appName__",
  "version": "2.1.0",
  "homepage_url": "https://*****.*********/",
  "description": "****** Vuejs",
  "default_locale": "fr",
  "action": {},
  "permissions": [
    "activeTab",
    "<all_urls>",
    "*://*/*",
    "storage"
  ],
  "icons": {
    "48": "icons/icon-48.png",
    "64": "icons/icon-64.png",
    "128": "icons/icon-128.png"
  },
  "background": {
    "scripts": [
      "js/background.js"
    ],
    "persistent": true
  },
  "browser_action": {
    "default_popup": "popup.html",
    "default_title": "__MSG_appName__",
    "default_icon": {
      "48": "icons/icon-48.png",
      "64": "icons/icon-64.png"
    }
  }
}
Ludo - Off the record
2021-10-08

我将代码替换为

browser.browserAction.onClicked.addListener(async (info, tab) => {

并且它有效。

alainebdev
2021-09-01