我正在开发一个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));
}
};
两个问题
有没有办法在调用之前检查连接状态
sendMessage
?
我怎样才能抑制这些错误(而不吞掉其他异常)?它似乎不会引起任何问题,但所有这些
Could not establish connection
日志消息使得很难发现实际的错误日志。
另外,我假设
chrome.runtime.sendMessage
导致错误,但日志没有堆栈跟踪或行号只是 index.js:1
您在关闭 Chrome 扩展程序的侧面板时似乎遇到了与 chrome.runtime.sendMessage 相关的错误。让我们来解答您的问题:
检查连接状态:虽然在调用
sendMessage
之前没有直接方法检查连接状态,但您可以在侧面板和后台脚本之间建立握手协议。例如,服务工作人员可以向侧面板发送“监听”消息,并且在接收到该消息后,侧面板可以用“监听”消息进行响应。如果面板在合理的时间范围内没有响应,您可以优雅地处理它或停止队列以避免进一步的错误。
抑制错误:您可以尝试抑制“无法建立连接”错误,而不使用以下逻辑吞掉其他异常:
if (chrome.runtime.lastError) {
// do nothing - errors can be present
}
通过合并此逻辑,您可以防止“无法建立连接”错误使控制台混乱,同时允许照常记录其他异常。这种方法有助于保持调试过程的清晰度,同时确保 Chrome 扩展程序的运行更顺畅。如果您还有任何其他问题或需要额外说明,请随时询问!