Javascript 上下文菜单不工作firefox附加组件WebExtensions

Javascript 上下文菜单不工作firefox附加组件WebExtensions,javascript,firefox-addon,contextmenu,firefox-addon-webextensions,Javascript,Firefox Addon,Contextmenu,Firefox Addon Webextensions,我正在尝试使用WebExtensionsAPI向我的firefox插件添加上下文菜单。我需要背景脚本来收听单击菜单项并向内容脚本发送消息。 这就是我所拥有的: manifest.json { "manifest_version": 2, "name": "MyExt", "version": "0.0.1", "description": "Test extension", "icons": { "48": "icons/icon-48.png" }, "

我正在尝试使用WebExtensionsAPI向我的firefox插件添加上下文菜单。我需要背景脚本来收听单击菜单项并向内容脚本发送消息。 这就是我所拥有的:

manifest.json

{
  "manifest_version": 2,
  "name": "MyExt",
  "version": "0.0.1",

  "description": "Test extension",
  "icons": {
    "48": "icons/icon-48.png"
  },

  "applications": {
    "gecko": {
      "id": "myext@local",
      "strict_min_version": "45.0"
    }
  },

  "permissions": ["contextMenus"],

  "background": {
    "scripts": ["background-scripts.js"]
  },

  "content_scripts": [
    {
      "matches": ["<all_urls>"],
      "js": ["content-script.js"]
    }
  ]
}
content script.js

chrome.contextMenus.create({
    id: "clickme",
    title: "Click me!",
    contexts: ["all"]
});

browser.contextMenus.onClicked.addListener(function(info, tab) {
    console.log("Hello World!");
    sendMessage(info, tab);
});

function sendMessage(info, tab) {
    chrome.tabs.query(
        {active: true, currentWindow: true }, 
        function(tabs) {
            chrome.tabs.sendMessage(tabs[0].id, "Test message from background script.");
        }
    );
}
browser.runtime.onMessage.addListener(function(msg) {
    console.log(msg);
});
正在创建菜单项,但消息从未显示(我正在检查Web和浏览器控制台)。由于单击事件不起作用,因此也不会发送消息

我是MDN的追随者,这不起作用。它还创建了菜单项,但它们什么也不做,这让我觉得API和MDN中的某些更改并没有更新文档


有什么想法吗?谢谢。

您的代码按以下方式工作:

我强烈怀疑您的问题是:

  • 您正在使用Firefox48之前的Firefox版本进行测试。Firefox48已经上市。报告明确指出,它的第一个功能版本是Firefox48。WebExtensionsAPI仍在开发中。一般来说,您应该针对或进行测试。如果您使用的所有API都指示在早期版本中工作,则可以使用早期版本。但是,如果您遇到问题,您应该每晚进行测试。我怀疑这是您最有可能的问题,因为您表示该公司没有采取任何行动
  • 您尚未导航到实际的网页。您的content-script.js仅加载到与支持的方案之一匹配的页面中:即“http”、“https”、“file”、“ftp”、“app”。它未加载在
    about:::
    页面中。如果这是您的问题,您可能已经从
    contextMenus
    示例代码中获得了部分功能。此外,使用您的代码,浏览器控制台会在延迟后生成错误消息:

    错误:无法建立连接。接收端不存在。
    

关于代码的注释:
注意,您的
sendMessage()
函数可能过于复杂。当选定上下文菜单项的选项卡的对象已作为参数之一传递给函数时,您正在搜索活动选项卡。较短的版本可以是:

function sendMessage(info, tab) {
    chrome.tabs.sendMessage(tab.id, "Test message from background script.");
}

我想知道您是否遇到过需要搜索活动选项卡而不是使用上下文菜单侦听器提供的
tabs.tab
对象的情况。

谢谢。问题在于Firefox的版本。认为我有最新版本是愚蠢的错误。关于Developer Edition,我的实际附加组件要复杂得多,DE正在做一些事情(我以前没有web开发经验,所以我不知道这个“事情”是什么)来阻止附加组件正常工作。我现在测试过了,效果很好。