web-dev-qa-db-ja.com

グーグルでクッキーを取得するchrome拡張機能

このコードを使用して、ドメインから特に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);

正しく動作します。後で使用するために値を保存するにはどうすればよいですか?

更新:スクリプトの実行後にchromeコンソールからalert(ID)を呼び出すと、機能するようです。chrome.cookies.getの実行が終了するまで待機するようにコードを設定するにはどうすればよいですか?

15
Franz Payer

ほとんどすべての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);
});
26
serg

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>
4
David Mills