为什么Chrome API无法在Firefox中使用?

时间:2018-07-23 11:01:24

标签: cookies google-chrome-extension firefox-addon

我正在为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会给我带来价值。

有人可以告诉我这里的实际问题是什么吗?

1 个答案:

答案 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
}