在Firefox插件中没有显示上下文菜单



我正在尝试创建一个Firefox插件,当右键单击页面时添加一个上下文菜单项。

我正在使用这个MDN页面上的说明:

https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/user_interface/Context_menu_items

根据指示,我写了一份清单。

{
"manifest_version": 2,
"name": "TestAddon",
"version": "0.1",
"description": "Test",
"icons": {
"48": "icons/icon-48.png"
},
"permissions": ["contextMenus"],

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

"browser_specific_settings": {
"gecko": {
"id": "sitetimelimiter@example.com",
"update_url": "https://example.com/updates.json"
}
}

}

…在background-script.js中,我使用MDN文章的指导方针编写了代码,并添加了一些额外的日志行用于调试:

console.log('mark 1');
browser.contextMenus.create({
id: "test-item",
title: "Test context-menu item",
contexts: ["all"],
}, onCreated);
console.log('mark 2');
browser.contextMenus.onClicked.addListener((info, tab) => {
switch (info.menuItemId) {
case "test-item":
alert("Test worked!");
break
}
});
console.log('mark 3');

据我所知,所有这些都符合MDN文档。

当我进入about:debugging并点击"Load Temporary Add-on…"为了测试插件,它加载插件时不会出现任何错误。

但是当我在浏览器中加载一个测试页面并右键单击该页时,测试项没有被添加到上下文菜单中。

看一下控制台,我可以看到"标记1"。显示,但"标记2"one_answers"标记3";永远不要被记录。

这似乎表明这部分有问题:

browser.contextMenus.create({
id: "timer-reset",
title: "Reset page timer",
contexts: ["all"],
}, onCreated);

…但我已经检查了三遍,语法似乎与MDN文档完全一致。

我还看到其他MDN文档指示我使用browser.menu .create()而不是browser. contextmenu .create(),但无论我使用。menus还是。contextmenus,我都得到相同的结果

我错过了什么?

问题是您正在尝试访问内容脚本中的browser.contextMenus。它们只能在后台脚本中使用。

从您链接到的MDN页面:

你可以在你的扩展的背景脚本中添加(和更新或删除)上下文菜单项。

所以你需要将这部分代码移动到后台脚本中,manifest.json:

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

最新更新