问题描述
我正在尝试捕获有关WebExtension中出站连接的security information(我刚好首先针对Firefox)。
此信息将在浏览器上运行的background script进程中进行处理,并最终用于更新browser action的外观,以便更轻松地访问有关该连接的证书颁发机构的其他信息。
但是,当我的代码调用sendMessage
时,会产生错误Uncaught (in promise) Error: Could not establish connection. Receiving end does not exist.
— 尽管已经添加了onMessage
侦听器!
sendMessage
应该触发先前通过onMessage.addListener
注册的回调,而不是产生此错误。我该怎么做才能达到这个结果?
该代码可在以下两个代码块中找到,easily tested通过将它们保存到文件夹中,然后转到about:debugging
>“ This Firefox”>“ Load Temporary Add-on…”。 > manifest.json
>“ test1:检查”,然后在另一个标签中加载任何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"]
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)