Chrome 扩展 `chrome.runtime.sendMessage(...)` 连接错误

问题描述 投票:0回答:1

我正在开发一个Chrome浏览器扩展,我有一个后台脚本,可以将长时间运行的任务的状态报告到侧面板。它似乎工作正常,但是当我关闭侧面板时,调试控制台中开始显示一堆错误。

index.js:1 未捕获(承诺中)错误:无法建立连接。接收端不存在。

侧面板脚本

chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
    const action = request.action;
    if (action === 'status-update') {
        showStatus(request.status);
    }
});

后台脚本

async function watchStatus(queue) {
    while(queue.running) {
        chrome.runtime.sendMessage({ action: 'status-update', status: queue.getStatus()});
        await new Promise(r => setTimeout(r, 1000));
    }
};

两个问题

  1. 有没有办法在调用之前检查连接状态

    sendMessage

  2. 我怎样才能抑制这些错误(而不吞掉其他异常)?它似乎不会引起任何问题,但所有这些

    Could not establish connection
    日志消息使得很难发现实际的错误日志。

  3. 另外,我假设

    chrome.runtime.sendMessage
    导致错误,但日志没有堆栈跟踪或行号只是
    index.js:1

javascript google-chrome-extension browser-extension
1个回答
0
投票

您在关闭 Chrome 扩展程序的侧面板时似乎遇到了与 chrome.runtime.sendMessage 相关的错误。让我们来解答您的问题:

  1. 检查连接状态:虽然在调用

    sendMessage
    之前没有直接方法检查连接状态,但您可以在侧面板和后台脚本之间建立握手协议。例如,服务工作人员可以向侧面板发送“监听”消息,并且在接收到该消息后,侧面板可以用“监听”消息进行响应。如果面板在合理的时间范围内没有响应,您可以优雅地处理它或停止队列以避免进一步的错误。

  2. 抑制错误:您可以尝试抑制“无法建立连接”错误,而不使用以下逻辑吞掉其他异常:

    if (chrome.runtime.lastError) {
        // do nothing - errors can be present
    }
    

通过合并此逻辑,您可以防止“无法建立连接”错误使控制台混乱,同时允许照常记录其他异常。这种方法有助于保持调试过程的清晰度,同时确保 Chrome 扩展程序的运行更顺畅。如果您还有任何其他问题或需要额外说明,请随时询问!

© www.soinside.com 2019 - 2024. All rights reserved.