私の拡張機能のコンテンツスクリプトでは、次のようにbackground.jsからデータをリクエストします。
fireOnNewTopic (); // Initial run on cold start or full reload.
window.addEventListener ("hashchange", fireOnNewTopic, false);
function fireOnNewTopic () {
/*-- For the pages we want, location.hash will contain values
like: "#!newtopic/{group title}"
*/
if (location.hash) {
var locHashParts = location.hash.split ('/');
if (locHashParts.length > 1 && locHashParts[0] == '#!newtopic') {
var subjectStr = '';
var bodyStr = '';
switch (locHashParts[1]) {
case 'opencomments-site-discussions':
chrome.extension.sendMessage({name:"domain"},
function(response)
{
subjectStr = response.domain;
});
chrome.extension.sendMessage({name:"url"},
function(response)
{
bodyStr = "URL of last page visited: " + response.url;
});
break;
default:
break;
}
if (subjectStr && bodyStr) {
runPayloadCode (subjectStr, bodyStr);
}
}
}
}
残念ながら、sendMessage()はコールバックと非同期で実行されるため、コードがrunPayloadCode()に到達した時点では、background.jsのコードが完了していないため、subjectStrとbodyStrはnullのままです。runPayloadCode()が呼び出されるまでにsubjectStrとbodyStrが入力されるように、コードを同期するための最良の方法は何ですか?