未捕获错误的原因:尝试使用已断开连接的端口对象。

25

当响应来自内容脚本的请求时,我在后台页面收到了这个错误。有人知道是什么原因导致了这个错误吗?

完整的堆栈跟踪:

Uncaught Error: Attempting to use a disconnected port object   chrome/RendererExtensionBindings:147 
chrome.Port.postMessage     chrome/RendererExtensionBindings:147 
chromeHidden.Port.dispatchOnConnect.connectEvent         chrome/RendererExtensionBindings:89 
myExtension.foo.sendResponse.state      background.js:1573 
db.readTransaction.tx.executeSql.paramStr      background.js:1038 

浏览几个小时后才会出现这种情况,重新加载扩展程序没有帮助 - 即使重新启动Chrome浏览器也只能维持几个小时正常。内容脚本可以继续向后台发送请求,但不会收到任何响应。有没有办法捕获此未捕获的错误并重置侦听器?

我正在使用chrome.extension.onRequest.addListener进行通信。在响应之前,我会查询数据库,并且在查询完成之前不会发送任何其他响应。

谢谢,Marek


1
请将您的代码放在后台页面和内容脚本中。 - serg
2个回答

24
这是由于连接关闭造成的。例如,如果您打开了一个注入了content_script的标签页,则它会打开一个连接,当您关闭该标签页时,background_page尝试传递消息,但会失败,因为无法将消息发送到不再处于活动状态的标签页。
在您的情况下,我猜测随着标签页的关闭和新标签页的打开,您正在尝试使用旧的tabId发送消息,而不是为新标签页创建新连接。我建议再次阅读长连接部分

3

然而,在我的情况下,我需要向 chrome.runtime.sendMessage(msg, responseCallbackMissingHere) 函数提供 sendResponse 函数,否则将会出现 "Attempting to use a disconnected port object" 错误。


sendMessage() 还是 postMessage()? - Alexander Mills
chrome.runtime.sendMessage() https://developer.chrome.com/extensions/runtime#method-sendMessage - Doug

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接