Ваш код показывает проблему.getSelected
возвращает вкладку в качестве обратного вызова, что означает, что обратный вызов выполняется, когда Chrome обнаружил выбранную вкладку.Это асинхронный и выполняется позже:
window.addEventListener("load", windowLoaded, false);
function windowLoaded() {
// 1) request selected tab
chrome.tabs.getSelected(null, function(tab) {
localStorage['url_in_address_bar']=tab.url; // 3) selected tab is stored
});
}
// 2) a tab is created
var saved_email = localStorage['blocker_user_email'];
if (saved_email === undefined || saved_email == "a@a.com")
{
//self.close();
chrome.tabs.create({url: '0_register.html'});
} else{
// self.close();
chrome.tabs.create({url: '1_options.html'});
}
Вы можете решить эту проблему, поместив вторую часть кода в функцию обратного вызова:
window.addEventListener("load", windowLoaded, false);
function windowLoaded() {
chrome.tabs.getSelected(null, function(tab) {
localStorage['url_in_address_bar']=tab.url;
var saved_email = localStorage['blocker_user_email'];
if (saved_email === undefined || saved_email == "a@a.com")
{
//self.close();
chrome.tabs.create({url: '0_register.html'});
} else{
// self.close();
chrome.tabs.create({url: '1_options.html'});
}
});
}
Функция обратного вызова - это функция, которую вы предоставляете в качестве аргумента другой функции (например, getSelected
).Когда эта другая функция выполнила свою задачу (например, найти выбранную вкладку), она выполнит предоставленную функцию.В то же время, однако, код, следующий за запросом, будет выполняться регулярно.