【问题标题】:Getting cookies in a google chrome extension在 google chrome 扩展程序中获取 cookie
【发布时间】:2011-05-05 03:02:38
【问题描述】:

我正在尝试使用此代码专门从域中获取 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 完成运行?

【问题讨论】:

    标签: javascript google-chrome google-chrome-extension


    【解决方案1】:

    几乎所有的 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);
    });
    

    【讨论】:

    • 如何修改它以将其保存为变量?当我尝试 ID = id 而不是 alert(id) 时,我仍然没有定义。
    • @DazSlayer 所有依赖异步调用的代码都应该使用回调重写。因此,如果您在其他地方需要此 ID,您还需要将该代码放入回调中。这里的代码不是逐行执行的。如果您使用 ajax,情况也是如此,只要想一想您是否正在向 chrome api 发送 ajax 请求。
    • 请注意,您应该将 "manifest_version": 2 添加到 manifest.json
    • 我必须在哪里调用 getCookie(以及我在哪里放置该代码)?在我的 background.js 或我的 content.js 中?或者我可以把它放在另一个脚本中吗?我有一个 app.html,其打开方式类似于“chrome-extension://efmbliijihpahlhiamhmmfkbjkecofec/app.html”
    【解决方案2】:

    任何依赖于 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>
    

    【讨论】:

    • 我必须在哪里调用 getCookie(以及我在哪里放置该代码)?在我的 background.js 或我的 content.js 中?或者我可以把它放在另一个脚本中吗?我有一个 app.html,其打开方式类似于“chrome-extension://efmbliijihpahlhiamhmmfkbjkecofec/app.html”
    猜你喜欢
    • 1970-01-01
    • 2010-11-29
    • 2015-05-26
    • 2011-10-05
    • 2014-02-07
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 2022-07-19
    相关资源
    最近更新 更多