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

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

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

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.расширение.по просьбе.addListener для моего сообщения. Прежде чем ответить, я запрашиваю DB, и я не отправляю никакого другого ответа до завершения запроса.

спасибо, Марек!--2-->

2 ответов


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

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


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