javascript - 获取与当前选项卡相关的所有 cookie

标签 javascript cookies google-chrome-extension

我现在一直在尝试各种方法,但无法使其正常工作。我想要与当前选项卡相关的所有 cookie(即那些在不同域(例如 google)上的 cookie)。下面只给我那些匹配标签域的。设置 getAll({}) 会为我提供与所访问的任何页面相关的所有 cookie。

document.addEventListener('DOMContentLoaded', function () {
  var cookies2=[];
  chrome.tabs.query({currentWindow:true,active:true},function(tab) {
      console.log(tab[0]);
      chrome.cookies.getAll({url:tab[0].url},function(cookies) {
        for (var i in cookies) {
            console.log(cookies[i].domain,cookies[i].path,cookies[i].name);
        }
      });
    });

});

最佳答案

“与当前选项卡相关的所有 cookie”到底是什么意思?

通过网络加载的任何资源都可以与 cookie 相关联。如果您只想获取选项卡中所有框架的 cookie,请使用 chrome.webNavigation.getAllFrames方法来获取与选项卡关联的 URL 列表。这是获取所有 cookie 的一种非常简单的方法。

chrome.tabs.query({
    currentWindow: true,
    active: true
}, function(tabs) {
    chrome.webNavigation.getAllFrames({
        tabId: tabs[0].id
    }, function(details) {
        // Get unique list of URLs
        var urls = details.reduce(function(urls, frame) {
            if (urls.indexOf(frame.url) === -1)
                urls.push(frame.url);
            return urls;
        }, []);
        // Get all cookies
        var index = 0;
        var cookies = [];
        urls.forEach(function(url) {
            chrome.cookies.getAll({
                url: url
            }, function(additionalCookies) {
                cookies = cookies.concat(additionalCookies);
                if (++index === urls.length) {
                    // Collected all cookies!
                    // TODO: Use cookies.
                    // Note: The array may contain duplicate cookies!
                }
            }); // chrome.cookies.getAll
        }); // urls.forEach
    }); // chrome.webNavigation.getAllFrames
}); // chrome.tabs.query

之前的方法是天真的,因为生成的 cookie 数组可能包含重复的条目(例如,如果页面包含 http://example.comhttp://example.com/index.htm,然后您将在 .example.com 上获得两个 cookie 条目。
有很多方法可以过滤 JavaScript 数组中的重复项,您可以在 this question 中查看一些方法。 .

如果您想从字面上获取与选项卡关联的所有 cookie,则需要使用 chrome.webRequest 收集它们应用程序接口(interface)。使用 webRequest 事件检测网络请求和 Cookie 请求 header 以及 Set-CookieSet-Cookie2 响应标题。不过,您必须手动解析 cookie。

如果您想快速查看与选项卡关联的所有 cookie(仅限框架,如第一种方法),您还可以打开开发者工具并查看资源 -> Cookies。

(图片来源:https://developers.google.com/chrome-developer-tools/docs/resources)

关于javascript - 获取与当前选项卡相关的所有 cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20995321/

相关文章:

javascript - clearInterval 在 javascript chrome 扩展中不起作用

javascript - 当缓存优先策略中的内容发生变化时,网站不会更新

javascript - 减少大型 javascript 操作对客户端的明显滞后的方法

javascript - 如何在 jQuery 组合框中强制选择文本

JQuery cookies + 动画、DIVS 和 wordpress

grails - grails2.2.5服务中如何访问cookie

c# - 如何获取 CookieContainer 中的 cookies 信息? (所有这些,不针对特定域)

javascript - 使用扩展程序移动 chrome 窗口

javascript - getElementsByClassName 和 querySelectorAll 之间的区别?

javascript - 如何从 WebAPI Controller 使用 javascript 函数发送 JSON(不带引号)