google-chrome-extension
メッセージの受け渡し
サーチ…
備考
応答を非同期で送信する
chrome.runtime.onMessage
コールバックから応答を非同期的に送信しようとすると、この間違ったコードを試すことがあります :
chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
$.ajax({
url: 'https://www.google.com',
method: 'GET',
success: function(data) {
// data won't be sent
sendResponse(data);
},
});
});
しかし、 data
が送信されることはありません。これは、 success
メソッドが実行され、メッセージチャネルが閉じられたsendResponse
に、非同期のajax呼び出しの中にsendResponse
を置いたために発生します。
解決策は明示的return true;
をreturn true;
限り簡単 return true;
コールバックの最後に、応答を非同期的に送信したいことを示します。したがって、 sendResponse
が実行されるまで、メッセージチャネルは相手(呼び出し側)にオープンされたままになります。
chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
$.ajax({
url: 'https://www.google.com',
method: 'GET',
success: function(data) {
// data would be sent successfully
sendResponse(data);
},
});
return true; // keeps the message channel open until `sendResponse` is executed
});
もちろん、onMessageコールバックからの明示的なreturn
にも適用されます。
chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
if (request.action == 'get') {
$.ajax({
url: 'https://www.google.com',
method: 'GET',
success: function(data) {
// data would be sent successfully
sendResponse(data);
},
});
return true; // keeps the message channel open until `sendResponse` is executed
}
// do something synchronous, use sendResponse
// normal exit closes the message channel
});
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow