Chrome拡張機能で何か奇妙なことが起こります。
コンテンツスクリプト:
console.log('content');
chrome.extension.onRequest.addListener(function(request, sender, sendResponse){
console.log('request received');
sendResponse();
});
chrome.extension.sendRequest( JSON.stringify({'msg': 'page_loaded'}) );
拡張メッセージをリッスンし、ページが読み込まれるとメッセージをバックグラウンドに送信します。
バックグラウンドスクリプト:
console.log('bg');
chrome.extension.onRequest.addListener(function(request, sender, sendResponse){
sendResponse();
chrome.tabs.sendRequest(
sender.tab.id,
JSON.stringify({'msg': 'page_loaded_bg_receive'}),
function(){
console.log('sendRequest page_loaded_bg_receive callback');
});
});
メッセージをリッスンし、メッセージを送信者タブに送信します。
そして、それは機能しているようです。少なくともほとんどの場合、ページログには「リクエストを受信しました」と表示されます。
Chromeに入るURLは、ユーザーが「Enter」を押す前に入力されたアドレスをロードすることがあります。これは奇妙な動作です。ページの読み込み、コンテンツスクリプトの実行、メッセージのバックグラウンドへの送信が、バックグラウンドからメッセージが返されると、バックグラウンドログメッセージで失敗します。
ポートエラー:接続を確立できませんでした。受信側は存在しません。miscellaneous_bindings:184 chromeHidden.Port.dispatchOnDisconnect miscellaneous_bindings:184
これはChromeのバグですか?プリロードタブにメッセージを送信するにはどうすればよいですか?
これは、そのような動作を再現するための人工的な最小限のサンプルです。メッセージを処理した後、複数回「chrome.tabs.sendRequest」を呼び出す必要があるため、「sendResponse」を呼び出すことは解決策ではありません。