web-dev-qa-db-ja.com

キャッチされないエラーの理由:切断されたポートオブジェクトを使用しようとしています

コンテンツスクリプトからのリクエストに応答すると、バックグラウンドページでこのエラーが発生します。誰かがこのエラーの原因を知っていますか?

フルスタックトレース:

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ブラウザはすべて数時間通常に戻り、コンテンツスクリプトは送信を続けることができますバックグラウンドへのリクエストがバックグラウンドからの応答を送り返すことはできませんこのUncaughtエラーをキャッチしてリスナーをリセットする方法はありますか?

通信にchrome.extension.onRequest.addListenerを使用しています。応答する前にDBにクエリを実行し、クエリが終了する前に他の応答を送信しません。

ありがとう、マレク

17
Marek

これは、接続が閉じられたときに発生します。たとえば、content_scriptが挿入されているタブを開くと、接続が開かれ、タブが閉じられてから、background_pageがメッセージを渡そうとします。タブがメッセージを受信するためにアクティブでなくなったため、失敗します。

あなたの場合、タブが閉じて新しいタブが開くと、新しいタブへの新しい接続を作成する代わりに、古いtabIdを使用してメッセージを投稿しようとしていると思います。 長寿命の接続セクション をもう一度読むことをお勧めします。

19
abraham

ただし、私の場合は、chrome.runtime.sendMessage(msg、responseCallbackMissingHere)にsendResponse関数を提供する必要がありました。これにより、「切断されたポートオブジェクトを使用しようとしています」というエラーが発生します。

3
Doug