我正在为Firefox和chrome开发扩展程序。我使用此代码在 ContentScript 中获取了Chrome中的Cookie。
getCookies(domain, name, callback) {
try{
chrome.cookies.get({"url": domain, "name": name}, function (cookie) {
if (callback) {
callback(cookie ? cookie.value : null);
}
});
}
catch(m)
{
console.log(m);
}
},
我认为这也可以在Firefox中使用,但这在那里不起作用。我尝试使用 browser.cookies.get ,但效果不佳。如果我在后台脚本中运行它,Firefox会给我带来价值。
有人可以告诉我这里的实际问题是什么吗?
答案 0 :(得分:-2)
document.cookie
使用;
作为分隔符,以 key = value 格式存储cookie。让我们获得这些值:
var myRawCookies = document.cookie.split(";");
现在解析它们:
var myCookies = {};
for (var index = 0; index < myRawCookies.length; index++) {
if (myRawCookies[index].indexOf("=") + 1) {
var cookieKey = myRawCookies[index].substring(0, myRawCookies[index].indexOf("="));
var cookieValue = myRawCookies[index].substring(myRawCookies[index].indexOf("=") + 1);
myCookies[cookieKey] = cookieValue;
}
}
现在,您可以使用myCookies[yourkey]
获取Cookie密钥。但是由于您可能需要多次,所以让我们定义一个原型:
function Cookie() {
var myCookies = undefined;
this.initialize = () => {
var myRawCookies = document.cookie.split("; ");
myCookies = {};
for (var index = 0; index < myRawCookies.length; index++) {
if (myRawCookies[index].indexOf("=") + 1) {
var cookieKey = myRawCookies[index].substring(0, myRawCookies[index].indexOf("="));
var cookieValue = myRawCookies[index].substring(myRawCookies[index].indexOf("=") + 1);
myCookies[cookieKey] = cookieValue;
}
}
}
this.get = (key) => {
if (!myCookies) this.initialize();
return myCookies[key];
};
}
现在,您可以像这样使用它:
var c = new Cookie();
var foo = c.get("yourkey");
编辑
如果使用FireFox WebExtension,则可以使用document.cookie
代替chrome.cookies
。您可以应用以下逻辑:
if (chrome && chrome.cookies) {
//Your original code
} else {
//Fallback logic
}