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

Tri*_*nci 69 google-chrome laravel vue.js

我正在为我的项目使用VueJS和Laravel.这个问题最近开始显现,甚至在旧的git分支中也显示出来.

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

小智 76

我在Chrome中停用了所有已安装的扩展程序 - 对我有用.我现在清除控制台没有错误.

  • 禁用所有扩展如何成为解决方案......甚至是一个考虑因素。对于我们许多人来说,扩展提供了基本的功能。 (54认同)
  • 我遇到此问题,是由Norton安全搜索扩展引起的 (5认同)
  • 为我禁用 Chrome 中的“Wappalyzer”扩展 (5认同)
  • MeddleMonkey已禁用 (3认同)
  • 在我的情况下,扩展程序是Google Publisher Toolbar (2认同)
  • 对我来说,这是“诺顿安全网”。 (2认同)
  • 就我而言,它是一个扩展“What a font” (2认同)
  • 对我来说,它是“色彩对比度分析仪”。 (2认同)
  • 禁用或切换正在侦听浏览器交互的扩展程序可能会导致这种情况,即 WebRecorders、API 助手(Amazon..)和其他不断等待交互的扩展程序... (2认同)
  • 完美的。我只是在隐身模式下运行代码来检查它是否有效。 (2认同)
  • Google 语音扩展今天刚刚开始。 (2认同)

小智 40

我使用的是名为 Free VPN for Chrome - VPN Proxy VeePN 的 VPN 扩展。它导致了错误;禁用它后错误消失了


小智 32

如果您访问chrome:// extensions /,则可以一次切换每个扩展名,然后查看实际上是哪个触发了该问题。

关闭扩展名后,刷新看到错误的页面,然后左右摆动鼠标或单击。鼠标动作是引发错误的事情。

因此,我能够查明实际上是哪个扩展引起了该问题,并将其禁用。

  • 就我而言,它是色彩对比度分析仪 (3认同)
  • 我的情况是1password扩展名 (2认同)
  • 就我而言,它是 Vivaldi “vivaldi://extensions” 下的“Google Publisher Toolbar” (2认同)

nok*_*eng 12

我已经回答了这个

就我而言,问题是由于Video Downloader professionalAdBlock

简而言之,由于某些Google chrome插件而出现此问题


Ofe*_*lon 12

如果您是扩展程序开发人员,并且已在此处搜索了自己的方法以尝试停止导致此错误:

问题不是CORB,因为被阻止的COR 表现为警告,例如-

跨域读取阻止(CORB)阻止了MIME类型为text / html的跨域响应 https://www.example.com/example.html。有关更多详细信息,请参见 https://www.chromestatus.com/feature/5629709824032768

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

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

  • 从事件侦听器返回true。这使sendResponse函数在侦听器返回后保持有效,因此您以后可以调用它。
  • 从事件侦听器返回一个Promise,并在收到响应时解决(或在发生错误时拒绝它)。

当您发送异步响应但无法使用这两种机制中的任何一种时,提供的sendResponse参数sendMessage超出范围,结果与错误消息所述的完全一样:在响应被关闭之前,您的消息端口(消息传递设备)已关闭收到。

Webextension-polyfill的作者已经在2018年6月撰写了有关它的文章

因此,最重要的是,如果您看到扩展引起这些错误,请仔细检查所有onMessage侦听器。其中一些可能需要开始返回promise(将它们标记为异步应足够了)。

  • 请注意,不要使用“async/await”作为后台侦听器回调。这对我来说失败了,我删除了“async”并在“then”结构代码中转换了“await”结构,现在它可以工作了。 (10认同)
  • 多么好的修复啊,谢谢!我所要做的就是在 _chrome.runtime.onMessage.addListener()_ 函数的底部添加 `return true;` ,问题就解决了!我在这个函数中使用 jQuery 的 `$.ajax`,这就是我需要这个修复的原因。 (6认同)
  • 但是...我不想发送任何回复,也不期待任何回复! (2认同)
  • @Michael在Chrome v99+扩展中,这是一个错误:/sf/ask/5006413891/ (2认同)

小智 10

确保您使用正确的语法。

我们应该在监听后使用sendMessage()方法。

这是contentScript.js的一个简单示例,它将 request 发送到app.js

内容脚本.js

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

应用程序.js

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


air*_*ush 7

如果错误原因是扩展名,请使用无痕 Ctrl+ Shift+ N。在隐身模式下,Chrome没有扩展程序。

UPD。如果您需要在隐身模式下进行某些扩展,例如ReduxDevTools或其他任何扩展,请在扩展设置中启用“允许隐身”


Ale*_*nov 7

Post很旧,与Chrome扩展程序的开发并没有密切的关系,但请在此处发布。

在回调中响应消息时,我遇到了同样的问题。解决方案是在后台消息侦听器中返回true

这是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
});
Run Code Online (Sandbox Code Playgroud)

这是popup.js,它在弹出窗口上发送消息。在取消注释background.js文件中的“ return true”行之前,您将获得例外。

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

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"
  ]
}
Run Code Online (Sandbox Code Playgroud)


Ahm*_*ais 7

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

我建议安装此One-Click Extension Disabler,我将它与键盘快捷键COMMAND (?)+ SHIFT (?)+ D— 一起使用,以快速禁用/启用我的所有扩展程序。

禁用扩展后,此错误消息应该会消失。

和平!??