私は、次の機能があります:GoogleのChromeのタブのいずれかがfacebookであるかどうかを確認する取り扱い非同期コールバック
function IsFacebookOpen() {
var url;
var facebookFound = false;
chrome.windows.getAll({"populate":true}, function(getInfo) {
for(var j = 0; typeof getInfo[j] != "undefined"; j++) {
for(var i = 0; typeof getInfo[j].tabs[i] != "undefined"; i++) {
url = getInfo[j].tabs[i].url;
if(url.substr(url.indexOf("facebook", 0), url.indexOf(".com", 0)-url.indexOf("facebook", 0)) == "facebook") {
facebookFound = true;
}
}
}
});
return facebookFound;
}
を。問題は、chromewindows.getAllが非同期であるため、すべてのタブを確認する前に関数が返されることです。これは、返される前にタブがチェックされていないので、戻り値は常にFALSEであることを意味します。私は次のようにして待つように機能を強制する場合:
function IsFacebookOpen() {
var url;
var facebookFound = false;
var done = false;
chrome.windows.getAll({"populate":true}, function(getInfo) {
for(var j = 0; typeof getInfo[j] != "undefined"; j++) {
for(var i = 0; typeof getInfo[j].tabs[i] != "undefined"; i++) {
url = getInfo[j].tabs[i].url;
if(url.substr(url.indexOf("facebook", 0), url.indexOf(".com", 0)-url.indexOf("facebook", 0)) == "facebook") {
facebookFound = true;
done = true;
}
}
}
done = true;
});
while(!done) { };
return facebookFound;
}
関数を返すことはありませんが、私は、アラートを使用している場合()および第二の分割のための機能を停止し、私は正しい戻り値を取得します。 このアラート()を使用せずに正しい値を返すにはどうすればよいですか?