我正在尝试使用 WebExtensions API 将上下文菜单添加到我的 Firefox 插件中。我需要后台脚本来收听单击菜单项并向内容脚本发送消息。这就是我所拥有的:
清单.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"]
}
]
}
背景-scripts.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.");
}
);
}
内容脚本.js
browser.runtime.onMessage.addListener(function(msg) {
console.log(msg);
});
正在创建菜单项,但从未显示消息(我正在检查 Web 和浏览器控制台)。由于单击事件不起作用,因此也不会发送消息。
我正在关注MDN 中的这个示例,但它不起作用。它还创建了菜单项,但它们什么都不做,这让我认为 API 中的某些内容发生了变化,MDN 并没有费心更新文档。
有任何想法吗?谢谢。