我正在尝试使用下面的代码将我的网页脚本与我的网络扩展的内容脚本进行通信
网页脚本
const browser = window.browser || window.chrome;
browser.runtime.sendMessage(message,
function (response) {
console.log(response);
}
);
但是,我不断收到错误TypeError:浏览器未定义
。如果我使用 chrome.runtime.sendMessage()
代替,情况也是如此。
我应该如何使用这个方法?
最佳答案
这里的问题是,出于安全目的,用户/网页脚本(非特权脚本)无权访问 JavaScript API,browser
, chrome
是 JavaScript API 的一部分,只能通过特权脚本访问,例如 Web 扩展的后台脚本和内容脚本(同样,内容脚本无法访问所有 JavaScript API)。基本上,如果您需要将数据从网页脚本发送到后台脚本,CustomEvent
应该用于将数据发送到充当桥梁的内容脚本,并从那里使用browser.runtime.sendMessage
将该数据发送到后台脚本。 。 PFB示例代码
window.onload = function(){
document.dispatchEvent(new CustomEvent("myEvent",{
detail:["Hello","World"]
}));
}
内容脚本.js
document.addEventListener("myEvent", function (event) {
browser.runtime.sendMessage({
data: event.detail
});
背景.js
browser.runtime.onMessage.addListener(function (message) {
data = message.data;
// do stuff
});
关于javascript - 类型错误 : browser is undefined (Web Extension Messaging),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50378133/