我试图从网页与扩展进行通信,反之亦然。API Web扩展,在浏览器和内容脚本之间进行通信
要做到这一点,我看着Mozilla的文档在这里:https://developer.mozilla.org/fr/Add-ons/WebExtensions/Content_scripts#Communicating_with_the_web_page
而且它有一个简单的例子,但我不能使它发挥作用。在网页的脚本,我有这样的:
// page-script.js
var messenger = document.getElementById("from-page-script");
messenger.addEventListener("click", messageContentScript);
function messageContentScript() {
window.postMessage({
direction: "from-page-script",
message: "Message from the page"
}, "*");
在内容脚本页面的扩展:
// content-script.js
window.addEventListener("message", function(event) {
if (event.source == window &&
event.data.direction &&
event.data.direction == "from-page-script") {
alert("Content script received message: \"" + event.data.message + "\"");
}
});
我安装的扩展(作为一个暂时的,我上传了我的XPI文件)然后我使用API WebExtensions的“调试”方法,并将一个断点放入侦听器,但每当我调用PostMessage时,该扩展都不会接收事件,断点从不触发。
这样可以在网页和扩展之间进行通信吗?还是有另一个?
请编辑问题为题目:包括一个**完整的** [mcve],重复的问题。包括一个* manifest.json *,一些背景*和*内容脚本。寻求调试帮助的问题(“**为什么不是这个代码工作?”)必须包括:►期望的行为,►特定问题或错误*和*►在问题中重现问题所需的最短代码**本身**。没有明确问题陈述的问题对其他读者无益。请参阅:“**如何创建[mcve] **”,[我可以在此处询问哪些主题?](http://stackoverflow.com/help/on-topic)和[问]。 – Makyen
您的代码适用于我的环境。有几件事你可以检查:尝试使用解压扩展而不是xpi,检查两个脚本是否加载。尝试从页面控制台运行'messageContentScript()'。 –
非常感谢Anatoly Sazanov,我明白了。当我将Chrome扩展程序改编为Firefox扩展程序时,我使用了后台脚本。我没有看到它,但清单声明我的内容脚本为后台脚本,因此是错误。 – Thordax