1. ホーム
  2. javascript

[解決済み] Chrome Extension メッセージの受け渡し:応答が送信されない

2022-04-26 18:21:56

質問

コンテンツスクリプトとエクステンションの間でメッセージを受け渡しようとしています。

以下は、content-scriptに記述している内容です。

chrome.runtime.sendMessage({type: "getUrls"}, function(response) {
  console.log(response)
});

そして、バックグラウンドのスクリプトには

chrome.runtime.onMessage.addListener(
  function(request, sender, sendResponse) {
    if (request.type == "getUrls"){
      getUrls(request, sender, sendResponse)
    }
});

function getUrls(request, sender, sendResponse){
  var resp = sendResponse;
  $.ajax({
    url: "http://localhost:3000/urls",
    method: 'GET',
    success: function(d){
      resp({urls: d})
    }
  });

}

ここで、ajax 呼び出しの前のレスポンスを getUrls 関数では、レスポンスは正常に送信されますが、ajax呼び出しのsuccessメソッドでレスポンスを送信すると、送信されません。 sendResponse 関数を使用します。

どのように解決するのですか?

から のドキュメントを参照してください。 chrome.runtime.onMessage.addListener :

ただし、イベントリスナーから true を返して、非同期でレスポンスを送信したいことを示す場合は、この関数は無効になります(これは sendResponse が呼ばれるまで、相手側にメッセージチャネルを開いたままにしておきます)。

つまり return true; の呼び出しの後に getUrls を使用して、レスポンス関数を非同期で呼び出すことを示します。