我正在尝试获取特定选项卡的所有cookie。
我遇到的麻烦,请原谅我,因为我不是饼干Maven,我从所有不同的方法得到的饼干都是不同的/不完整的。
方法一:
document.cookie
-我的理解是,这些是与文档相关联的cookie。换句话说,我在chrome中加载了一个URL,在网络选项卡中,我看到有一个请求我加载的URL的文档。在请求头中,我可以看到cookie。
但是,由于某些原因,我在请求头中看到的cookie与document.cookie
将打印的cookie不同。此外,当我检查DevTools - Application - Cookies时,与document.cookie
相比,有多得多的cookie。
方法二:
chrome.tabs.executeScript({
code: 'performance.getEntriesByType("resource").map(e => e.name)',
}, data => {
if (chrome.runtime.lastError || !data || !data[0]) return;
const urls = data[0].map(url => url.split(/[#?]/)[0]);
const uniqueUrls = [...new Set(urls).values()].filter(Boolean);
Promise.all(
uniqueUrls.map(url =>
new Promise(resolve => {
chrome.cookies.getAll({url}, resolve);
})
)
).then(results => {
// convert the array of arrays into a deduplicated flat array of cookies
const cookies = [
...new Map(
[].concat(...results)
.map(c => [JSON.stringify(c), c])
).values()
];
// do something with the cookies here
console.log(uniqueUrls, cookies);
});
});
字符串
我理解先生的方式。wOxxOm的回答是,它从加载特定选项卡中的URL时发出的所有请求中获取所有cookie。
同样,当我比较我从上面的代码中得到的东西时,它与我在DevTools - Application - Cookies中看到的不同。
也许是因为一些cookie是在页面加载后使用JS设置的,因此在加载原始URL时不属于请求的一部分?
方法三:
然后是chrome.cookies.getAll
,但它得到所有的cookie存储在 chrome .如果我理解正确,这就是方法2解决方案的原因。如果我们得到所有的cookie,我们不知道它们属于哪个标签,因为单个标签可以保存多个域的cookie。
我发现了一个评论先生。wOxxOm,它解释了如何识别隐身cookieStore,对我来说,这似乎是唯一的解决方案,真正让你所有的cookie保存为一个特定的标签,并应希望匹配什么是显示在DevTools -应用程序-Cookie。
通过在隐身模式下使用单个标签,我们基本上将该标签的cookie与其他cookie隔离开来,并希望覆盖所有cookie。
沿着如下的东西:
1.打开隐身窗口
1.浏览一个网址(并做一些事情,即登录等)
1.找出选项卡所属的cookieStore ID
1.使用chrome.cookies.getAll
获取该特定cookieStore的所有cookie
沿着如下的东西:
// get current tab (my extension will work by clicking the extension icon, so popup.html/popup.js)
chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
var currTab = tabs[0];
if (!currTab["incognito"]) { // If it's not an incognito tab, stop here
console.log("current tab is not incognito");
}
else { // If it is an incognito tab, return tabId
console.log(currTab["id"]);
}
});
// Check cookieStoreId based on the tabId
chrome.cookies.getAllCookieStores(function (cookiestores){
var cookieStore = cookiestores.find(obj => {
return obj.tabIds.includes(tabId);
});
console.log(cookieStore["id"]);
});
get all cookies based on cookieStoreId
chrome.cookies.getAll({"storeId": "1"},function (cookie){
console.log(cookie)
});
型
我的假设正确吗?方法3真的是获取特定标签的所有cookie的唯一方法吗?
1条答案
按热度按时间jdzmm42g1#
对我来说,这是一个权限问题。我需要请求
"<all_urls>"
主机权限才能看到所有cookie。没有它,我只看到了一部分饼干。清单v3:
字符串
如果你对我写的获取特定标签的所有cookie的脚本感兴趣,你需要脚本和cookie权限。
型
我的脚本基于@wOxxOm的脚本,获取指定选项卡的所有cookie并删除它们:
型