私のプロジェクトではVueJSとLaravelを使用しています。この問題は最近現れ始め、古いgitブランチにも現れます。
このエラーはChromeブラウザでのみ表示されます。
私のプロジェクトではVueJSとLaravelを使用しています。この問題は最近現れ始め、古いgitブランチにも現れます。
このエラーはChromeブラウザでのみ表示されます。
回答:
Chromeにインストールされているすべての拡張機能を無効にしました-機能します。エラーなしでコンソールをクリアしました。
あなたがこのエラーを引き起こさないようにしようとしてここにあなたの方法をグーグルした拡張機能開発者の場合:
問題は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に感謝]
async/await
バックグラウンドリスナーのコールバックには使用しないでください。これは私にとって失敗したものです、私は構造コードを削除して構造コードにasync
変換しawait
ましたがthen
、今は機能します。
return true;
は私のchrome.runtime.onMessage.addListener()関数の下部に追加することであり、問題は解決しました!$.ajax
この関数内でjQueryを使用しているため、この修正が必要です。
chrome:// extensions /にアクセスすると、各拡張機能を1つずつ切り替えて、実際に問題を引き起こしている拡張機能を確認できます。
拡張機能をオフに切り替えたら、エラーが表示されているページを更新し、マウスを少し動かすか、クリックします。マウスアクションは、エラーをスローするものです。
そのため、実際に問題を引き起こしている拡張機能を特定して無効にすることができました。
Google Publisher Toolbar
ヴィヴァルディの下にあったvivaldi://extensions
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
はどのようなシナリオで役に立ちますか?
This function becomes invalid when the event listener returns, unless you return true
。無効とはどういう意味ですか?とにかくメッセージを受信するたびに作成されるとは思いませんか?
Chrome 73でこのエラーをデバッグするためにここに来る人にとって、1つの可能性は、Chrome 73以降はコンテンツスクリプトでクロスオリジンリクエストを許可しないためです。
もっと読む:
これは、Chromeが「ほとんどの拡張機能がこの変更の影響を受けないことを当社のデータは示している」と考えるため、拡張機能を修正するためにスクランブルをかける必要がある多くのChrome拡張機能の作成者に影響します。
(アプリのコードとは関係ありません)
更新:CORの問題を修正しましたが、まだこのエラーが表示されます。ここではChromeのせいだと思います。
このエラーは通常、いずれかのChrome拡張機能が原因で発生します。
このワンクリック拡張機能無効化ツールをインストールすることをお勧めします。キーボードショートカットCOMMAND (⌘)+ SHIFT (⇧)+ D— を使用して、すべての拡張機能をすばやく無効化/有効化します。
拡張機能を無効にすると、このエラーメッセージは表示されなくなります。
平和!✌️
正しい構文を使用していることを確認してください。
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
私にとってはAuto Tab Discard
、固定されたタブでそのエラーがスローされました。バグレポートhttps://github.com/rNeomy/auto-tab-discard/issues/101を作成しました。