browser.runtime.sendMessage:“接收端不存在”

问题描述

我正在尝试捕获有关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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...