У меня есть следующая функция:
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;
}
Это проверяет, является ли одна из вкладок в Google Chrome Facebook.Проблема в том, что chromewindows.getAll является асинхронным, поэтому функции возвращаются до того, как все вкладки могут быть проверены.Это означает, что возвращаемое значение всегда ЛОЖНО, так как ни одна вкладка не проверяется перед возвратом.Если я заставлю функцию ждать, выполнив следующее:
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;
}
функция никогда не вернется, но если я использую alert () и остановлю функцию на доли секунды, я получу правильное возвращаемое значение.Как я могу вернуть правильное значение без использования этого оповещения ()?