Причина ошибки Uncaught: попытка использования отключенного объекта порта

Я получаю эту ошибку на исходной странице при ответе на запрос из содержимого script. Кто-нибудь знает, что может вызвать эту ошибку?

Полная трассировка стека:

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, все вернется к нормальному состоянию в течение нескольких часов. script может продолжать отправлять запрос на задний план, но НЕТ ответа из фона может быть отправлено назад Есть ли способ поймать эту ошибку Uncaught и reset прослушиватель?

Я использую chrome.extension.onRequest.addListener для моего сообщения. Прежде чем я отвечу, я запрашиваю DB, и я не посылаю никакой другой ответ до завершения запроса.

Спасибо, Marek

Ответ 1

Это происходит, когда соединение закрывается. Например, если вы открываете вкладку с введенным содержимым, она открывает соединение, вкладка закрывается, а затем background_page пытается передать сообщение. Он не сработает, потому что вкладка больше не активна для приема сообщения.

В вашем случае я бы предположил, что при закрытии вкладок и новых вкладок вы пытаетесь публиковать сообщения со старым tabId вместо создания нового подключения к новой вкладке. Я бы рекомендовал снова прочитать раздел долгоживущих подключений.

Ответ 2

В моем случае, однако, мне нужно было предоставить функцию sendResponse для chrome.runtime.sendMessage(msg, responseCallbackMissingHere), которая даст вам ошибку "Попытка использования отключенного объекта порта".