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

新手上路,请多包涵

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

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

原文由 Triumf Maqedonci 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2k
2 个回答

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

原文由 MirekH 发布,翻译遵循 CC BY-SA 4.0 许可协议

如果您是扩展程序开发人员,在这里搜索您的方式试图停止导致此错误:

问题不在于 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 监听器。其中一些可能需要开始返回承诺(将它们标记为异步就足够了)。 [感谢@vdegenne]

原文由 Ofek Shilon 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题