如何解决“未经检查的runtime.lastError:在收到响应之前关闭消息端口”的Chrome问题?

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

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

小宇宙猪猪2020/03/10 10:18:50

我将控制台日志数据从一个选项卡发送到另一个选项卡,而实际上并不需要第一个控制台。但是,错误消息确实使我烦恼,所以我右键单击并选择“不显示来自x网站的消息”。也许这是最简单的解决方法:)

Eva理查德2020/03/10 10:18:50

如果浏览器上安装了任何防病毒扩展,请禁用。就我而言,反病毒扩展才是罪魁祸首。

Near西里泡芙2020/03/10 10:18:50

就我而言,这是在我自己的页面源中设置的断点。如果我删除或禁用了断点,则错误将清除。

断点位于渲染代码的中等复杂度中。页面不同部分中的其他断点没有这种效果。我无法制定出一个总是会触发此错误的简单测试用例。

JinJin西门2020/03/10 10:18:50

对我来说是Auto Tab Discard,它会在固定的标签上抛出该错误。我创建了一个错误报告,https://github.com/rNeomy/auto-tab-discard/issues/101

阿飞宝儿猴子2020/03/10 10:18:50

就我而言,这是OneTab chrome扩展程序。

理查德理查德2020/03/10 10:18:50

对于那些来这里调试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的错。

阿飞神无2020/03/10 10:18:50

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

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

神无Davaid2020/03/10 10:18:50

我已经回答了这个

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

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

Tony小小2020/03/10 10:18:50

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
});

这是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"
  ]
}
StafanGO2020/03/10 10:18:50

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

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

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

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

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

  • return true from the event listener. This keeps the sendResponse function valid after the listener returns, so you can call it later.
  • return a Promise from the event listener, and resolve when you have the response (or reject it in case of an error).

When you send an async response but fail to use either of these mechanisms, the supplied sendResponse argument to sendMessage goes out of scope and the result is exactly as the error message says: your message port (the message-passing apparatus) is closed before the response was received.

Webextension-polyfill authors have already written about it in June 2018.

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

2020/03/10 10:18:50

我禁用了Chrome中所有已安装的扩展程序-适用于我。我现在已经清除控制台,没有错误。

Green樱2020/03/10 10:18:50

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

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

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