gpt4 book ai didi

javascript - 为什么检查 runtime.lastError 会生成端口错误?

转载 作者:行者123 更新时间:2023-12-02 23:30:50 25 4
gpt4 key购买 nike

在我的实际 Chrome 扩展程序中与一个奇怪的错误斗争了几个小时后,我终于成功确定了以下 MCVE:

背景.js

chrome.runtime.onMessage.addListener(function(request) {
if (typeof request.hello !== "undefined") {
console.log("I got it!");
}
});

options.js

// the following gives an error
// chrome.runtime.sendMessage({ hello: true }, function(response) {
// if (chrome.runtime.lastError) {
// console.log(chrome.runtime.lastError);
// }
// });
// the following does not
chrome.runtime.sendMessage({ hello: true });

正如您可能从上面的评论中看出的那样,当我添加额外的回调函数来检查运行时最后一个错误时,它会给出一个错误:

The message port closed before a response was received.

但是,当我不添加回调函数时,不会产生错误!

据我所知 the docs ,这是我的回调函数的正确格式:

If you specify the responseCallback parameter, it should be a function that looks like this: function(any response) {...};

因此,我无法理解这种不一致的行为。我检查了类似的问题,并将 return true 添加到 background.js 监听器只是延迟了第一种情况下错误的发生。

这是一个zip of the above files在本地进行测试。我使用的是 Chrome 75。

更新:我不打算从我的后台 js 文件发送任何响应。这只是从我的选项页面到后台页面的一次性消息。

最佳答案

不会,至少在我的 Chrome 75 中不会。

您看到的错误消息是因为您没有从后台脚本中应答,但这并不是因为您检查了 runtime.lastError

如果你想避免这个错误,你需要从后台脚本中回答;

chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
if(sender.tab && // check it's actually a tab that talked to us
typeof request.hello !== "undefined"
) {
sendResponse({received: true}); // or whatever you like
}
});

关于javascript - 为什么检查 runtime.lastError 会生成端口错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56515772/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com