API WebExtensions,在浏览器和内容脚本之间通信
API WebExtensions, communicate between browser and content script
我正在尝试从网页到扩展程序进行通信,反之亦然。
为此,我查看了此处的 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的"Debugging"方法,并在监听器中放置了一个断点,但是每当我调用了 PostMessage,扩展似乎从未接收到事件,从未触发过断点。
是否可以通过这种方式在网页和扩展程序之间进行通信?或者还有其他的吗?
问题出在我的扩展清单中。我将我的内容脚本声明为背景脚本。
所以,与其这样写:
"background": {
"scripts": ["myscript.js"],
"persistent": true
},
您必须像这样声明脚本:
"content_scripts": [
{
"matches": ["<all_urls>"],
"js": ["myscript.js"]
}
]
我遇到了类似的问题,我的问题是我打电话给
window.postMessage
iframe 中的函数。在我将其更改为
之后
top.window.postMessage
它开始工作了。
我正在尝试从网页到扩展程序进行通信,反之亦然。
为此,我查看了此处的 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的"Debugging"方法,并在监听器中放置了一个断点,但是每当我调用了 PostMessage,扩展似乎从未接收到事件,从未触发过断点。
是否可以通过这种方式在网页和扩展程序之间进行通信?或者还有其他的吗?
问题出在我的扩展清单中。我将我的内容脚本声明为背景脚本。
所以,与其这样写:
"background": {
"scripts": ["myscript.js"],
"persistent": true
},
您必须像这样声明脚本:
"content_scripts": [
{
"matches": ["<all_urls>"],
"js": ["myscript.js"]
}
]
我遇到了类似的问题,我的问题是我打电话给
window.postMessage
iframe 中的函数。在我将其更改为
之后top.window.postMessage
它开始工作了。