我正在尝试在 WebExtension 中捕获有关出站连接的安全信息(我碰巧首先针对 Firefox)。
此信息将在浏览器上运行的后台脚本进程中进行处理,并最终用于更新浏览器操作的视觉外观,以便更轻松地访问有关连接认证机构的一些附加信息。
然而,当我的代码调用 时sendMessage,它会产生错误
Uncaught (in promise) Error: Could not establish connection. Receiving end does not exist.
——<strong>尽管onMessage已经添加了监听器!
sendMessage应该触发先前通过 注册的回调,而不是产生此错误onMessage.addListener。我必须做什么才能达到这个结果?
该代码可以在以下两个代码块中找到,并且可以通过将它们保存到文件夹中来轻松测试,然后转到about:debugging>“This Firefox”>“Load Temporary Add-on...”> manifest.json>“test1: Inspect”,然后在另一个选项卡中加载任何 HTTPS 网站。
//background.js
//Create onMessage callback
function f(message,sender,callback) {
console.log("onMessage listener caught a message!");
console.log("here it is:", message);
}
//Enable onMessage callback
console.log("Adding onMessage listener...");
browser.runtime.onMessage.addListener(f);
//(verify it was enabled)
if(browser.runtime.onMessage.hasListener(f)){
console.log("onMessage listener added successfully!");
} else {
console.error("FAILED TO ADD onMessage LISTENER!",f);
}
//Create onHeadersReceived callback
async function g(details){
let message={
details: details,
securityInfo: await browser.webRequest.getSecurityInfo(details.requestId, {certificateChain:true})
};
console.log('onSendHeaders event triggered\n\nMore information:',message);
console.log('Sending via sendMessage\u2026');
browser.runtime.sendMessage(message);
}
//Enable onHeadersReceived callback
console.log("Adding onHeadersReceived listener...");
browser.webRequest.onHeadersReceived.addListener(g,
{
types:['main_frame'],
urls:['<all_urls>']
},
['blocking']
);
//(verify it was enabled)
if(browser.webRequest.onHeadersReceived.hasListener(g)){
console.log("onHeadersReceived listener added successfully!")
} else {
console.error("FAILED TO ADD onHeadersReceived LISTENER!",g);
}
//manifest.json
{
"manifest_version": 2,
"name": "test1",
"version": "0.0.1",
"description": "AAAAaaaaAAaA",
"permissions": [
"webRequest","webRequestBlocking",
"<all_urls>"
],
"background": {
"scripts": ["background.js"]
}
}