「Unchecked runtime.lastError:応答を受信する前にメッセージポートが閉じました」というChromeの問題を修正するにはどうすればよいですか?


138

私のプロジェクトではVueJSとLaravelを使用しています。この問題は最近現れ始め、古いgitブランチにも現れます。

このエラーはChromeブラウザでのみ表示されます。


3
広告ブロッカーはありますか?
Maelig

1
この他の要求に私の答えをチェック:stackoverflow.com/questions/53919591/...
Dolfiz

3
みんなありがとう、問題は拡張機能「Video Downloader Professional」でした。
Triumf Maqedonci

2
私と同じように、Video Downloaderプロフェッショナルはそのようなエラーを生成していました
sinedsem

1
承認された解決策は構成の問題であり、プログラミングの問題の原因の修正/理解とは関係がないため、投票は終了します。
Greg Domjan

回答:


163

Chromeにインストールされているすべての拡張機能を無効にしました-機能します。エラーなしでコンソールをクリアしました。


20
MeddleMonkeyが無効
terantul

6
私はこの問題を抱えていた、ノートンセーフサーチの拡張によって引き起こされた
Boardy

7
私の場合、拡張機能はGoogleサイト運営者向けツールバーでした
Leandro Castro

3
私にとっては「Norton Safe Web」でした。
フランクフルトララヴェル

2
ソリューションのすべての拡張機能を無効にするにはどうすればよいですか...または考慮事項です。私たちの多くにとって、拡張機能は重要な機能を提供します。
ビンス

52

あなたがこのエラーを引き起こさないようにしようとしてここにあなたの方法をグーグルした拡張機能開発者の場合:

問題はCORBではありません。ブロックされたCORは次のような警告として現れます -

クロスオリジン読み取りブロック(CORB)により、MIMEタイプtext / htmlのクロスオリジン応答https://www.example.com/example.htmlがブロックされました 。詳細については、https://www.chromestatus.com/feature/5629709824032768を参照 してください。

この問題は、runtime.sendMessageに対する非同期応答の誤処理である可能性が高いです。MDN氏は述べています

非同期応答を送信するには、2つのオプションがあります。

  • イベントリスナーからtrueを返します。これにより、リスナーが戻った後もsendResponse関数が有効になり、後で呼び出すことができます。
  • イベントリスナーからPromiseを返し、応答があったら解決します(またはエラーの場合は拒否します)。

非同期応答を送信したが、これらのメカニズムのいずれかを使用できなかった場合、提供されたsendResponse引数sendMessageが範囲外になり、結果はエラーメッセージのとおりです。応答が発生する前にメッセージポート(メッセージパッシング装置)が閉じられています受け取った。

Webextension-polyfillの作者は、2018年6月にそれについてすでに書います。

つまり、拡張機能がこれらのエラーの原因であることがわかった場合は、すべてのonMessageリスナーを綿密に調べてください。それらの一部はおそらく、promiseを返す必要があります(非同期としてマークするだけで十分です)。[@vdegenneに感謝]


4
ヘッドアップとして、async/awaitバックグラウンドリスナーのコールバックには使用しないでください。これは私にとって失敗したものです、私は構造コードを削除して構造コードにasync変換しawaitましたがthen、今は機能します。
vdegenne

しかし...私は応答を送信しようとはしていませんし、期待もしていません!
マイケル

すばらしい修正、ありがとう!私がしなければならなかったすべてreturn true;は私のchrome.runtime.onMessage.addListener()関数の下部に追加することであり、問題は解決しました!$.ajaxこの関数内でjQueryを使用しているため、この修正が必要です。
RcoderNY

42

chrome:// extensions /にアクセスすると、各拡張機能を1つずつ切り替えて、実際に問題を引き起こしている拡張機能を確認できます。

拡張機能をオフに切り替えたら、エラーが表示されているページを更新し、マウスを少し動かすか、クリックします。マウスアクションは、エラーをスローするものです。

そのため、実際に問題を引き起こしている拡張機能を特定して無効にすることができました。


2
私の場合、それは1password拡張でした
Alexander Kim

私の場合、それはカラーコントラストアナラ​​イザー
でした

2
私の場合、それはGoogle Publisher Toolbarヴィヴァルディの下にあったvivaldi://extensions
Shim-Sao

はい、拡張機能を1つずつ無効にします。エラーを引き起こしているいくつかの拡張機能があることがわかりました!ありがとう
Jose Mhlanga

17

Postはかなり古く、Chrome拡張機能の開発とは密接に関係していませんが、ここに置いておきます。

コールバックでメッセージに応答するときに同じ問題が発生しました。解決策は、バックグラウンドメッセージリスナーでtrueを返すことです

これはbackground.jsの簡単な例です。これは、popup.jsからのメッセージに応答します。

chrome.runtime.onMessage.addListener(function(rq, sender, sendResponse) {
    // setTimeout to simulate any callback (even from storage.sync)
    setTimeout(function() {
        sendResponse({status: true});
    }, 1);
    // return true;  // uncomment this line to fix error
});

これは、ポップアップでメッセージを送信するpopup.jsです。background.jsファイルの「return true」行のコメントを解除するまで、例外が発生します。

document.addEventListener("DOMContentLoaded", () => {
    chrome.extension.sendMessage({action: "ping"}, function(resp) {
        console.log(JSON.stringify(resp));
    });
});

manifest.json、念のため:)アラームの権限セクションに注意してください!

{
  "name": "TestMessages",
  "version": "0.1.0",
  "manifest_version": 2,
  "browser_action": {
    "default_popup": "src/popup.html"
  },
  "background": {
    "scripts": ["src/background.js"],
    "persistent": false
  },
  "permissions": [
    "alarms"
  ]
}

それは私のために働いた!デフォルトreturn falseはどのようなシナリオで役に立ちますか?
Eduardo Reis

ドキュメントは言うThis function becomes invalid when the event listener returns, unless you return true。無効とはどういう意味ですか?とにかくメッセージを受信するたびに作成されるとは思いませんか?
Eduardo Reis

@EduardoReis。FALSEの場合、イベントを通知するためのインフォーマーとして使用できます。
Aleksej Vasinov

14

私はこれについて答えまし

私の場合、問題はVideo Downloader professionalAdBlock

要するに、この問題はいくつかのgoogle chromeプラグインが原因で発生します


7

エラーの理由は、拡張使用お忍びであれば Ctrl+ Shift+ N。シークレットモードでは、Chromeに拡張機能はありません。

UPD。ReduxDevToolsなどのシークレットモードで拡張機能が必要な場合は、拡張機能の設定で[シークレットモードで許可]をオンにします。


4

Chrome 73でこのエラーをデバッグするためにここに来る人にとって、1つの可能性は、Chrome 73以降はコンテンツスクリプトでクロスオリジンリクエストを許可しないためです。

もっと読む:

  1. https://www.chromestatus.com/feature/5629709824032768
  2. https://www.chromium.org/Home/chromium-security/extension-content-script-fetches

これは、Chromeが「ほとんどの拡張機能がこの変更の影響を受けないことを当社のデータは示している」と考えるため、拡張機能を修正するためにスクランブルをかける必要がある多くのChrome拡張機能の作成者に影響します。

(アプリのコードとは関係ありません)

更新:CORの問題を修正しましたが、まだこのエラーが表示されます。ここではChromeのせいだと思います。


4

このエラーは通常、いずれかのChrome拡張機能が原因で発生します。

このワンクリック拡張機能無効化ツールをインストールすることをお勧めします。キーボードショートカットCOMMAND (⌘)+ SHIFT (⇧)+ D— を使用して、すべての拡張機能をすばやく無効化/有効化します。

拡張機能を無効にすると、このエラーメッセージは表示されなくなります。

平和!✌️



2

正しい構文を使用していることを確認してください。

sendMessage()メソッドをリッスンしてから使用する必要があります。

contentScript.jsの簡単な例を次に示します。app.jsへのsendRequestです。

contentScript.js

chrome.extension.sendRequest({
    title: 'giveSomeTitle', params: paramsToSend
  }, function(result) { 
    // Do Some action
});

app.js

chrome.extension.onRequest.addListener( function(message, sender, 
 sendResponse) {
  if(message.title === 'giveSomeTitle'){
    // Do some action with message.params
    sendResponse(true);
  }
});

sendRequest は非推奨の使用ですsendMessage
user889030

1

ブラウザにアンチウイルス拡張機能がインストールされている場合は無効にします。私の場合、アンチウイルス拡張機能が原因でした。



0

私の場合、自分のページソースに設定されたブレークポイントでした。ブレークポイントを削除または無効にすると、エラーが解消されます。

ブレークポイントは、適度に複雑なレンダリングコードのチャンクにありました。ページの別の部分にある他のブレークポイントには、そのような影響はありませんでした。常にこのエラーをトリガーする単純なテストケースを作成できませんでした。


0

1つのタブから別のタブにコンソールログデータを送信していて、最初のコンソールは実際には必要ありませんでした。しかし、エラーメッセージは私を悩ませましたので、私は右クリックして「xウェブサイトからのメッセージを表示しない」を選択しました。多分これが最も簡単な修正です:)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.