如何修复“ Uncheck runtime.lastError: 无法建立连接。接收端不存在。”

在我的 Node/Express/React 应用程序的每个页面加载中,Chrome 开发工具控制台都出现了以下错误:

未检查 runtime.lastError: 无法建立连接。接收端不存在

此错误引用 localhost/: 1。当我把鼠标移到这里时,它会显示 http://localhost:3000/ ,也就是我在浏览器中查看应用程序的地址。

有人知道是怎么回事吗?我发现的大多数提出这个错误的帖子似乎与某人试图开发 Chrome 扩展有关,即使那样,他们也往往没有多少回应。

195468 次浏览

我得到了完全相同的错误(除了我的应用程序没有后端和反应前端) ,我发现它不是来自我的应用程序,它实际上是来自“视频速度控制器”Chrome 扩展。如果您没有使用那个扩展,请尝试禁用所有扩展,然后逐个将它们重新打开?

错误通常是由铬扩展引起的。 试着禁用所有的扩展,问题就会消失。

解决方案

对于 Chrome 浏览器:

  1. 您打开了带有控制台错误的窗口,打开了第二个新窗口。

  2. 在第二个窗口中,转到: Chrome://扩展名

  3. 通过切换(每张卡片右下角的蓝色滑块)禁用每个扩展,并在切换每个扩展后用控制台刷新窗口。

  4. 一旦没有错误,删除扩展名。

对我来说,错误是由于一个登录扩展铬。删除它修复了问题。

对我来说,这正在 Chrome 中发生,我发现它就是 McAfee WebAdvisor。我一关闭它,信息就消失了: enter image description here

删除“ Udacity 前端反馈”铬扩展为我解决了这个问题。

在我的情况下缓存器扩展-但是是禁用每个,然后重新加载页面

对我来说,这就是标签捆绑器: https://chrome.google.com/webstore/detail/tab-bundler/ooajenhhhbdbcolenhmmkgmkcocfdahd

禁用扩展修复了这个问题。

我只是延期了几次。不过,禁用然后重新启用可以解决这个问题。语法就是其中之一。希望错误不会再发生。

我在 edge://extensions/页面/选项卡上测试我的扩展。在另一个选项卡上测试它解决了这个问题。我认为这也可能发生在 chrome://extensions/

奇怪的是,对于我自己来说,我只是禁用了所有的扩展,错误就消失了。

但是,在重新启用我禁用的所有程序之后,错误仍然没有出现。

如果你是一个扩展开发人员看到这个 Chrome 扩展消息传递: 未检查 runtime.lastError: 无法建立连接。接收端不存在

问题的核心在于 chrome API 的行为发生了变化,您需要为此添加一个变通方法。

我在开发 Chrome 扩展时也发现了同样的问题,最终我找到了关键问题。

未检查 runtime.lastError: 无法建立连接。接收端不存在

关键问题是,当 background.js通过 chrome.tabs.sendMessage 向活动选项卡发送消息时,页面上的 content.js没有准备好或者没有重新加载。调试时。我们必须确保 content.js 是活动的。它不可能是一个没有刷新的页面,旧的页面不会更新你 js 本身

这是我的代码:

//background.js
chrome.tabs.query({active: true, currentWindow: true},function(tabs) {
chrome.tabs.sendMessage(tabs[0].id, {greeting: "hello"}, function(response) {
console.log(response);
});
});




//content.js
chrome.runtime.onMessage.addListener(function(request, sender, sendResponse){
console.log(request, sender, sendResponse);
sendResponse('我收到你的消息了:'+JSON.stringify("request"));
});

这通常是由扩展引起的。

如果您不想禁用或删除导致此错误的扩展名,您可以通过在控制台的 Filter 框中键入 -/^Unchecked\sruntime\.lastError\:\sCould\snot\sestablish\sconnection\.\sReceiving\send\sdoes\snot\sexist\.$/来过滤掉这个特定的错误:

Example

Example #2

据我所知,这个过滤器将一直保持,直到你手动删除它,你可以关闭和重新打开控制台,重新启动 Chrome 等,只要你想,过滤器将永远不会被自动删除。

我只在第一个 Chrome 页面得到这个信息 =
当 Chrome 不运行时,我打开它——或者直接打开,或者双击桌面上的一个页面。
(我不知道这是否重要,但我已经关闭了“谷歌浏览器关闭时继续运行后台应用程序”。)
所以,我假设这是 Chrome 的垃圾间谍/“增强用户体验”尝试。
我不知道它试图发送什么,但我很高兴它不能! :)
因此,第二个(或除第一个以外的任何一个)选项卡没有错误。
= = 不需要禁用任何东西(扩展等)。

您需要在 runtime.sendMessage回调中处理 window.chrome.runtime.lastError。这个错误只需要处理。下面是我的代码:

window.chrome.runtime.sendMessage(
EXTENSION_ID,
{ message:"---" }, // jsonable message
(result) => {
if (!window.chrome.runtime.lastError) {
// message processing code goes here
} else {
// error handling code goes here
}
}
);
});

未检查 runtime.lastError: 无法建立连接。接收端不存在。


我“实现”了这个错误之后

  1. 在 Visual Studio 代码中安装 Chrome 扩展的调试器,
  2. 调试我的代码,然后
  3. 关闭并重新打开未调试的 Chrome 窗口。(我在调试的时候让 Chrome 运行我的应用程序。)

解决方案:

  • 停止使用扩展名。
  • 刷新未调试的 Chrome 窗口。
  • 使用不同的调试器。

当然,当我使用针对 Chrome 的调试器重做步骤2和步骤3时,控制台错误会再次出现。这鼓励我使用其他调试器来代替。这样我就不会错误地认为我自己的代码产生了控制台错误!

对我来说,这是由以下原因造成的:

Iobit 冲浪保护和广告删除扩展

这是 Iobit 高级系统护理软件的附件。但是,控制台可能会向您提供关于您需要做什么 关闭或该问题的原因的相关信息。

根据 google 的搜索结果,可能出现这个错误的原因是,导致错误的扩展可能正在使用 chrome.runtime.sendMessage () ,然后尝试使用响应回调。

控制台中显示的错误

希望这些信息对你有所帮助。祝你有美好的一天!

我删除了“视频速度控制器”Chrome 扩展,错误也被删除了。 对我来说就是这样。在您的情况下,可能还有其他一些扩展,也可能导致此错误。

这仅仅是由于安装了 chrome 扩展,所以修复这个首先禁用所有 chrome 扩展,然后开始启用一个接一个的扩展来检测哪个扩展是因为您可以启用其余的扩展。

在我的情况下删除’广告拦截 youtube’扩展工作为我

简单的回答:

如果你没有从另一个结束它也会告诉你 接收端不存在的反应。

详细回答:

如果你没有来自另一端的答案,它也会告诉你接收端不存在。因此,如果您有任何 callBack 函数,它应该在您的。SendMessage 部分,如果可能没有来自另一端的响应,则应该删除它或处理它。

所以

如果我想重写 简单的一次性请求部分的消息传递文档的谷歌 API,我将 使用错误处理程序编写它用于消息发送方法中的回调函数,如下所示:

从内容脚本发送请求如下:

chrome.runtime.sendMessage({greeting: "hello"}, function (response) {
if (!chrome.runtime.lastError) {
// if you have any response
} else {
// if you don't have any response it's ok but you should actually handle
// it and we are doing this when we are examining chrome.runtime.lastError
}
});

从扩展名向内容脚本发送请求看起来非常相似,只是需要指定将请求发送到哪个选项卡。此示例演示如何在选定的选项卡中向内容脚本发送消息。

chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
chrome.tabs.sendMessage(tabs[0].id, {greeting: "hello"}, function(response) {
if (!chrome.runtime.lastError) {
// if you have any response
} else {
// if you don't have any response it's ok but you should actually handle
// it and we are doing this when we are examining chrome.runtime.lastError
}
});
});

在接收端,需要设置一个 runtime.onMessage 事件侦听器来处理消息。这在内容脚本或扩展页面上看起来是一样的。

chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse) {
console.log(sender.tab ?
"from a content script:" + sender.tab.url :
"from the extension");
if (request.greeting === "hello")
sendResponse({farewell: "goodbye"});
}
);

对于 chrome 扩展开发,这是由 chrome.tabs.sendMessage方法抛出的错误。

以下是相关文档的链接: https://developer.chrome.com/docs/extensions/reference/tabs/#method-sendMessage。在这个链接中,您可以找到回调函数的说明: 如果在连接到指定的选项卡时发生错误,则不带参数调用回调,并将 runtime.lastError 设置为错误消息。

根据上面的文档,错误是由于指定的选项卡造成的。我重新启动铬和重新加载的扩展,这个问题是固定的

简单的修复方法是从处理 chrome.tabs.sendMessage 的函数内部修复 return true;。 已经说过了 这里

(这与其他答案相似)

显然,在浏览器启动期间发生了一个错误,并且浏览器没有启动诸如 style、 adblock 之类的扩展。我关闭浏览器,重新打开它,我的网页工作没有错误。

我用下面的方法解决了这个问题。这主要是 铬合金扩展的问题,尝试首先 空缓存和硬重载为这个 视察任何窗口和 保持重新装弹按钮约2秒,然后它会出现3 选择点击 最后一个,这是上面提到的,然后转到 管理扩展和关闭一个接一个,然后再打开一个接一个,检查它是否消失。

未检查 runtime.lastError: 无法建立连接。接收端不存在

Chrome.runtime.lastError

这是一个出现在 ChromedevTools 控制台中的错误。 它与 Chrome 浏览器消息传递有关

由于 Chrome 平台的“僵化结构”,在不同的 Chrome 窗口/标签页之间传递数据并不容易,这在“面向对象”的编程语言中很常见。

在 Chrome 扩展中,通常不会有一个单独的代码文件来运行所有页面或标签页。

对于不同的 Windows/tab/url 地址,用 javascript 构建许多不同的代码文件是一种常见的用法。

因此,当软件需要传递来自不同窗口/选项卡/网址的数据时,它使用的是“消息传递”

“消息传递”允许发送“消息”,并等待接收到作为“ callBack”的消息

但有时会发生这样的情况,例如,当有一个“消息传递”函数被触发但仍然没有返回时,窗口或选项卡的 URL 会发生变化。

如果这种情况不是由代码管理(如 TechDogLover OR KiaNasirzadeh所写) ,或者是一个旧的扩展没有更新,就会出现这种错误。

因此,正如其他用户所说,它可以是一个扩展,在你的 Chrome 中运行。

但是如果您的窗口没有崩溃,那么禁用一个扩展就没有多大意义了,因为这样的消息会出现在 devTools 控制台中。

如果你不是导致这个错误的软件开发人员,试图去理解如何修复它是没有意义的,因为变量是如此之多,以至于在同样的情况下,这个错误不会再次被触发。

在这些情况下,在我看来,如果您真的想要做一些事情,那么一旦您找到了导致错误的扩展,就可以与扩展开发人员联系并报告它。

如果你是开发商,你可以检查一下

if(!chrome.runtime.lastError){
// here if there is no error
} else {
// here if there is an error
}

或者,如果您执行了多次回调,您也可以检查您的代码,例如,如上所述 评论