开发者

Getting cookies in a google chrome extension [duplicate]

This question already has answers here: How do I return the response from an asynchronous call? (41 answers) Closed last month.

I am trying to get a cookie specifically from a domain using this code:

<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&开发者_如何学Cgt;

The problem is that the alert always says undefined. However, if I change

ID = cookie.value;

to

alert(cookie.value);

it works properly. How do I save the value to use later?

Update: It appears that if I call alert(ID) from the chrome console after the script runs, it works. How can I set my code to wait until chrome.cookies.get finishes running?


Almost all Chrome API calls are asynchronous, so you need to use callbacks to run code in order:

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);
});


Any code that depends on the result of the call to chrome.cookies.get() will have to be invoked from within the callback. In your example, just wait for the callback to fire before you show the alert:

<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>


To get all cookies under a domain:

 const r = await chrome.cookies.getAll({ domain: domain }) //domain: stackoverflow.com

This script can be run from popup and background service worker but not a content script.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜