我试图从网页到扩展程序进行通信,反之亦然。
为此,我在这里查看了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时,扩展似乎永远不会接收到该事件,断点永远不会被触发。
是否可以在网页和扩展程序之间进行通信?或者还有另一个吗?
答案 0 :(得分:1)
问题在于我的扩展。我将我的内容脚本声明为后台脚本。
所以,而不是写这个:
e = (HibernateException) e;
你必须像这样声明脚本:
"background": {
"scripts": ["myscript.js"],
"persistent": true
},
答案 1 :(得分:0)
我遇到了类似的问题,而我遇到的问题是我正在调用
window.postMessage
在iframe中运行。我把它改成了
之后top.window.postMessage
它开始工作了。