2015-01-15 2 views
2

У меня есть расширение Google Chrome со страницей popup.html.Расширение Chrome не будет получать URL с первой попытки

Единственный сценарий, который начинается при загрузке страницы:

document.addEventListener('DOMContentLoaded', function() { 
    window.domain = ""; 
    chrome.tabs.getSelected(function (tabs) { 
     window.domain = tabs.url; 
     console.log(window.domain); 
    }); 
    window.enabled = true; 
    domain = window.domain; 
    checkStatus(); 

}); 

функция checkStatus является:

function checkStatus() { 
    if (enabled === true) { 
    $(".status").html("Enabled"); 
    $(".statusContainer").css("background-color", "rgb(24, 150, 71)"); 
    $(".powerButton").attr("src", "images/enabled.png"); 
    $(".questionContainer").show("fast"); 
    $(".domain").html("on " + window.domain); 
    } 
    else if (enabled === false){ 
    $(".status").html("Disabled"); 
    $(".statusContainer").css("background-color", "rgb(102, 102, 102)"); 
    $(".powerButton").attr("src", "images/disabled.png"); 
    $(".questionContainer").hide("fast"); 
    } 
} 

однако, когда я нажимаю на значок внутренней линии, чтобы открыть страницу, я только например, «on» вместо «на google.com». Однако, когда я проверяю всплывающее окно и переключаюсь на консоль и снова запускаю checkStatus, расширение отображается «на google.com», если я нахожусь в Google, например.

Я не уверен, что вызывает это, но console.log показывает URL-адрес так, как должен, поэтому я думаю, что это проблема с функцией checkStatus, так как вкладка загружается при открытии всплывающего окна.

ответ

1

Это типичная проблема асинхронности

Обработчик часть chrome.tabs.getSelected, скорее всего, будет называться после вы назвали checkStatus(), что приведет к window.domain еще будучи пустой строкой ""

Решение: следует позвонить по телефону checkStatus() из обратного вызова

document.addEventListener('DOMContentLoaded', function() { 
    window.domain = ""; 
    chrome.tabs.getSelected(function (tabs) { 
     window.domain = tabs.url; 
     console.log(window.domain); 
     window.enabled = true; 
     domain = window.domain; 
     checkStatus(); 
    }); 

}); 
Смежные вопросы