如何修复'未检查运行时。lastError:在收到响应之前消息端口关闭'chrome的问题?

我在我的项目中使用VueJS和Laravel。这个问题最近开始出现,甚至在旧的git分支中也出现了。

此错误仅在Chrome浏览器中显示。

628600 次浏览

我禁用了Chrome中所有安装的扩展-为我工作。 我现在已经清除控制台没有错误

如果你去chrome: / / extensions /,你可以一次切换每个扩展,看看哪个真正触发了问题。

关闭扩展后,刷新看到错误的页面,并左右摆动鼠标或单击。鼠标操作会抛出错误。

因此,我能够查明是哪个扩展程序导致了这个问题,并禁用它。

对于那些来这里调试Chrome 73中的这个错误的人来说,一种可能是因为Chrome 73以后不允许内容脚本中的跨源请求。

更多阅读:

  1. https://www.chromestatus.com/feature/5629709824032768
  2. https://www.chromium.org/Home/chromium-security/extension-content-script-fetches

这影响了许多Chrome扩展的作者,他们现在需要努力修复扩展,因为Chrome认为“我们的数据显示大多数扩展不会受到这个变化的影响。”

(这与你的应用程序代码无关)

更新:我修复了CORs问题,但我仍然看到这个错误。我怀疑这是Chrome的错。

如果你是一个扩展开发人员,你在谷歌上搜索了一下,试图停止引起这个错误:

问题不是CORB(如这里的另一个答案所述),因为阻塞了CORs 声明为警告,如-

跨源读阻塞(CORB)阻止跨源响应 https://www.example.com/example.html与MIME类型文本/html。看到 https://www.chromestatus.com/feature/5629709824032768获取更多信息 细节。< / p >

该问题很可能是对runtime.sendMessage的异步响应处理不当。MDN说:

要发送一个异步响应,有两个选项:

  • 从事件监听器返回true。这将保留sendResponse 函数在监听器返回后有效,因此您可以稍后调用它
  • 从事件监听器返回一个Promise,并解析 当你有响应(或在错误的情况下拒绝它).

当你发送一个异步响应但没有使用这两种机制中的任何一种时,提供给sendResponse的参数就超出了作用域,结果就像错误消息所说的那样:你的消息端口(消息传递设备)在收到响应之前关闭了。

webextend -polyfill作者有已经在2018年6月写过了

所以底线,如果你看到你的扩展导致这些错误-仔细检查你所有的onMessage监听器。他们中的一些人可能需要开始返回承诺(将它们标记为异步就足够了)。[谢谢@vdegenne]

在我的例子中,它是在我自己的页面源代码中设置的断点。如果我删除或禁用断点,则错误将清除。

断点位于一个相当复杂的呈现代码块中。页面不同部分的其他断点没有这种效果。我无法找出总是触发此错误的简单测试用例。

如果错误原因是扩展名,使用隐身Ctrl+转变+N。在隐身模式下Chrome没有扩展。

乌利希期刊指南。如果你需要一些隐身模式下的扩展,比如ReduxDevTools或者其他的,在扩展设置中打开“允许隐身模式”

Post是相当老的,与Chrome扩展开发没有密切关系,但让它在这里。

我也有同样的问题,在回调回复消息。解决方案是在后台消息侦听器中返回真正的

下面是background.js的简单例子。它响应来自popup.js的任何消息。

chrome.runtime.onMessage.addListener(function(rq, sender, sendResponse) {
// setTimeout to simulate any callback (even from storage.sync)
setTimeout(function() {
sendResponse({status: true});
}, 1);
// return true;  // uncomment this line to fix error
});

这里是popup.js,它在弹出窗口上发送消息。你会得到异常,直到你取消注释background.js文件中的“return true”行。

document.addEventListener("DOMContentLoaded", () => {
chrome.extension.sendMessage({action: "ping"}, function(resp) {
console.log(JSON.stringify(resp));
});
});

manifest.json,以防万一:)注意告警权限部分!

{
"name": "TestMessages",
"version": "0.1.0",
"manifest_version": 2,
"browser_action": {
"default_popup": "src/popup.html"
},
"background": {
"scripts": ["src/background.js"],
"persistent": false
},
"permissions": [
"alarms"
]
}

确保您使用了正确的语法。

在听了sendMessage ()方法之后,我们应该使用它。

下面是contentScript.js的一个简单例子,它将请求发送到app.js

contentScript.js

chrome.extension.sendRequest({
title: 'giveSomeTitle', params: paramsToSend
}, function(result) {
// Do Some action
});

app.js

chrome.extension.onRequest.addListener( function(message, sender,
sendResponse) {
if(message.title === 'giveSomeTitle'){
// Do some action with message.params
sendResponse(true);
}
});

此错误通常是由您的Chrome扩展之一引起的。

我建议安装这个一键扩展禁用,我使用键盘快捷键命令(⌘) + 转变(⇧) + D -来快速禁用/启用我的所有扩展。

一旦扩展被禁用,这个错误消息就会消失。

和平!✌️

我建议你先禁用所有的扩展,然后一个接一个地启用它们,直到你找到一个导致问题的,在我的情况下,自然阅读器文本到语音导致了这个错误,所以我禁用了它。与Cross-Origin Read Blocking (CORB)没有任何关系,除非错误提到Cross-Origin,然后更进一步,这是值得尝试的方法。

此问题的原因与您的chrome扩展之一有关,而不是CORS或CORB。要解决这个问题,你可以关闭你安装的每一个chrome扩展。

  • 我在react project运行时遇到了同样的错误。

这个错误来自我的chrome

IObit Surfing Protection
2.2.7

extensions。我的错误扩展被解决了。

如果你面临同样的错误,首先关闭你的chrome广告拦截器或任何其他扩展,而运行。

诺顿安全网络扩展chrome是抛出这个错误信息为我。在我禁用这个扩展后,错误消息消失了。

这里晚了,但在我的情况下,它是卡巴斯基云保护扩展。我禁用了它。一切都很顺利。

对我来说,我正在使用一个VPN扩展名为 它只是在禁用它之后才导致错误…

.错误消失

这里只清理网站cookie就可以了。