Я пытаюсь заставить функцию завершиться, когда stop == false, но я не совсем уверен, как все выполняется, исходя из того, что мне говорят мои сообщения об отладке.
Код:
chrome.tabs.onRemoved.addListener(checkTabs);
function checkTabs() {
var stop = true;
chrome.windows.getAll({populate:true},function(windows)
{
windows.forEach(function(window)
{
window.tabs.forEach(function(tab)
{
for(var i = 0; i < numWatch; i++)
{
if(tab.url.indexOf(watchList[i]) != -1)
{
stop = false;
alert("(1)" + stop); //When the if condition is false, I somehow get this alert after the one below
return;
}
}
});
});
});
alert("(2)" + stop); //I always get this alert first and it always reads "true"
if(stop == true)
{
clearInterval(timer);
timerOn = false;
}
}
Этот блок кода всегда выполняется - мое первое предупреждение всегда "true"; даже когда я настраиваю свои вкладки таким образом, чтобы стоп был установлен в ложь, он сначала предупреждает «true», а затем предупреждает «false»:
if(stop == true)
{
clearInterval(timer);
timerOn = false;
}
Почему это? Я вижу довольно простой обходной путь, чтобы заставить мою программу работать, но мне любопытно, почему моя функция ведет себя так странно: кажется, что нижний оператор if каким-то образом выполняется перед операторами перед ним ...
Вот мой манифест (хотя я сомневаюсь, что он уместен) - приведенный выше код является частью моего скрипта background.js:
{
"manifest_version": 2,
"name": "Drill Sergeant",
"description": "Tracks time spent on 'watchlist' websites",
"version": "1.0.0",
"browser_action": {
"default_popup": "popup.html"
},
"background": {"scripts": ["background.js"]},
"permissions": ["activeTab", "webNavigation", "notifications", "tabs", "background"]
}