0

我正在尝试在 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"]
    }

}
4

0 回答 0