Получение куки в расширении Google Chrome - PullRequest
14 голосов
/ 05 мая 2011

Я пытаюсь получить cookie конкретно из домена, используя этот код:

<script language="javascript" type="text/javascript">

var ID;

function getCookies(domain, name) {
    chrome.cookies.get({"url": domain, "name": name}, function(cookie) {
        ID = cookie.value;
    });
}

getCookies("http://www.example.com", "id")
alert(ID);

</script>

Проблема в том, что в предупреждении всегда указано неопределенное. Однако если я изменю

ID = cookie.value;

до

alert(cookie.value);

это работает правильно. Как сохранить значение для последующего использования?

Обновление. Похоже, что если я вызываю alert (ID) из консоли Chrome после запуска сценария, он работает. Как настроить мой код на ожидание завершения работы chrome.cookies.get?

Ответы [ 2 ]

25 голосов
/ 05 мая 2011

Почти все вызовы Chrome API являются асинхронными, поэтому вам нужно использовать обратные вызовы для запуска кода в следующем порядке:

function getCookies(domain, name, callback) {
    chrome.cookies.get({"url": domain, "name": name}, function(cookie) {
        if(callback) {
            callback(cookie.value);
        }
    });
}

//usage:
getCookies("http://www.example.com", "id", function(id) {
    alert(id);
});
4 голосов
/ 05 мая 2011

Любой код, который зависит от результата вызова chrome.cookies.get (), должен вызываться из обратного вызова.В вашем примере просто подождите, пока не сработает обратный вызов, прежде чем показывать предупреждение:

<script language="JavaScript" type="text/javascript">

    var ID;

    function getCookies(domain, name) 
    {
        chrome.cookies.get({"url": domain, "name": name}, function(cookie) {
            ID = cookie.value;
            showId();
        });
    }

    function showId() {
        alert(ID);
    }

    getCookies("http://www.example.com", "id")        

</script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...