我现在一直在尝试各种各样的事情,但无法让它发挥作用。我想要所有与当前标签相关的Cookie(也就是那些在不同域名上的Cookie,例如google)。以下仅为我提供了与标签域匹配的内容。设置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);
}
});
});
});
答案 0 :(得分:6)
“与当前标签相关的所有Cookie”究竟是什么意思?
通过网络加载的任何资源都可以与cookie相关联。如果您只想获取标签中所有框架的Cookie,请使用chrome.webNavigation.getAllFrames
方法获取与标签相关联的网址列表。这是获取所有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.com
和http://example.com/index.htm
,那么您将在{{{{}}获得两个条目1}})。
有许多方法可以在JavaScript数组中过滤重复项,您可以在this question中看到一些方法。
如果您希望逐字地获取与标签相关联的所有Cookie,则需要使用chrome.webRequest
API收集它们。使用.example.com
事件检测网络请求以及webRequest
请求标头以及Cookie
和Set-Cookie
响应标头。您必须手动解析cookie。
如果您想快速查看与选项卡关联的所有Cookie(仅限框架,如第一种方法),您还可以打开开发人员工具并查看参考资料 - >饼干)。
(图片来源:https://developers.google.com/chrome-developer-tools/docs/resources)