在google chrome扩展中获取cookie

Getting cookies in a google chrome extension

本文关键字:获取 cookie 扩展 google chrome      更新时间:2023-09-26

我正在尝试使用以下代码从域获取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控制台调用警报(ID),它就会起作用。我如何设置我的代码等待,直到chrome.cookies.get完成运行?

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

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

获取一个域下的所有cookie:

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

这个脚本可以在弹出窗口和后台service worker中运行,但不能在内容脚本中运行。