【发布时间】:2017-03-10 10:27:27
【问题描述】:
我正在使用 Firefox WebExtension,它在网页和本机可执行文件之间建立链接(使用本机消息 API)。
到目前为止,我一直在使用一对内容/背景脚本,并使用window.PostMessage 发送/接收消息,如下所示:
页面脚本
// Method used to communicate with content sript of the Firefox WebExtension
var callExtension = function(JSONmessage, timeout, callbackFnk) {
var promiseRequest = new Promise((resolve, reject) => {
const listener = (event) => {
if (
event.source == window && event.data.direction
&& event.data.direction == "my-extension-from-content-script"
) {
resolve(event.data.message);
}
}
setTimeout(() => {
window.removeEventListener("message", listener);
resolve(false); // Timeout
}, timeout);
window.addEventListener("message", listener);
window.postMessage({
direction: "my-extension-from-page-script",
message: JSONmessage
}, "*");
});
promiseRequest.then((result) => {
// now we are calling our own callback function
if(typeof callbackFnk == 'function'){
callbackFnk.call(this, result);
}
});
};
// Checks the presence of the extension
callExtension("areYouThere", 200, function(result) {
if(result) {
$("#result").text("Extension installed");
} else {
$("#result").text("Extension not installed");
}
});
内容脚本
window.addEventListener("message", function(event) {
if (event.source == window &&
event.data.direction &&
event.data.direction == "my-extension-from-page-script") {
if(event.data.message == "areYouThere") {
/** Checks the presence of the extension **/
window.postMessage({
direction: "my-extension-from-content-script",
message: "OK"
}, "*");
}
}
});
代码在一个简单的网页上运行良好,但是当我尝试让它在已经使用 window.postMessage 和 window.addEventListener ("message", ...) 的页面上运行时,扩展程序不会捕获从页面发送的消息,并且所以我的扩展程序无法工作。
有没有办法将消息从页面脚本发送到不使用
window.postMessage和window.addEventListener的内容脚本?如果不是,如何确保从页面从
window.postMessage发送的消息将仅发送到我的扩展程序并且不会被其他侦听器捕获?
【问题讨论】:
-
为了能够回答这个问题(不只是猜测它发生的原因),我们需要一个 complete minimal reproducible example(包括一个 manifset .json 文件)以及您尝试完成此操作的实际 URL,但它失败了。
标签: javascript jquery firefox postmessage firefox-addon-webextensions