我正在尝试将我的网页脚本与我的网络扩展程序的内容脚本通过以下代码进行通信
网页脚本
const browser = window.browser || window.chrome;
browser.runtime.sendMessage(message,
function (response) {
console.log(response);
}
);
但是,我一直收到错误TypeError: browser is undefined
。如果我改为使用chrome.runtime.sendMessage()
,也会如此。
我该如何使用这种方法?
答案 0 :(得分:1)
此处的问题是,出于安全考虑,用户/网页脚本(非特权脚本)无法访问JavaScript API,browser
,chrome
是JavaScript API的一部分,只能通过特权脚本,如Web扩展的后台脚本和内容脚本(同样内容脚本无法访问所有JavaScript API)。基本上,如果您需要将网页脚本中的数据发送到后台脚本,则应使用CustomEvent
将数据发送到充当桥梁的内容脚本,然后使用{{1}将数据发送到后台脚本}。 PFB示例代码
browser.runtime.sendMessage
contentscript.js
window.onload = function(){
document.dispatchEvent(new CustomEvent("myEvent",{
detail:["Hello","World"]
}));
}
background.js
document.addEventListener("myEvent", function (event) {
browser.runtime.sendMessage({
data: event.detail
});