使用Mozilla附加组件仅计算HTTP的cookie

时间:2016-07-27 17:44:40

标签: javascript cookies firefox-addon firefox-addon-sdk mozilla

我正在尝试开发一个Firefox附加组件。我想计算仅标记为HTTP的cookie。手动检查时,我发现很多网站都有多个HTTP cookie。但是,我的结果始终为01。我的错在哪里?

这是我的代码:

var {Cc, Ci, Cu} = require("chrome");
Cu.import("resource://gre/modules/Services.jsm");
var cookieManager = Cc["@mozilla.org/cookiemanager;1"].getService(Ci.nsICookieManager2);
var tabs = require("sdk/tabs");

tabs.on('load', function(tab) { 
    var URL = tab.url;
    var url = require("sdk/url").URL(URL);
    var host = url.host;

    function getCookies(host){
        var cookies = cookieManager.getCookiesFromHost(host);
        var count = 0;
        while (cookies.hasMoreElements()){
            var cookie = cookies.getNext().QueryInterface(Ci.nsICookie2);
            //var count = 0;
            var httpCookie = cookie.isHttpOnly;
            if(httpCookie){
                return count=count+1 ;
            }else{
                return 0;
            }
            console.log("Cookie host: " + cookie.host + "; Cookie Name :" +  cookie.name 
                        + " = Cookie value:" + cookie.value + "\n");
            dump("\tCookie host: " + cookie.host + " Is Domain cookie: " +cookie.isDomain 
                 + "; Cookie Name :" + cookie.name +" = Cookie value:" + cookie.value 
                 + "; Is Session Cookie  :" + cookie.isSession 
                 + "; Expiry time  :" + cookie.expiry 
                 + "; It is an Http only cookie :" + cookie.isHttpOnly  +  "\n");
        }
        return count;
    }
    var getResult = getCookies(host);
    console.log("Http Cookies: " + getResult);
});

1 个答案:

答案 0 :(得分:1)

function getCookies(host)内,您有一个while循环,用于循环指定host的所有Cookie。但是,该循环的内部部分只执行一次。

在该循环中,您有一个if语句:

var httpCookie = cookie.isHttpOnly;
if(httpCookie){
    return count=count+1 ;
}else{
    return 0;
}

此语句导致函数立即返回10,具体取决于找到的第一个Cookie是否将cookie.isHttpOnly属性设置为true或{{1 }}。 [注意:当false语句第一次也是唯一一次执行时,cookie始终为0。]除了第一个之外,没有其他cookie被检查,因为您立即{{1} } 价值。函数的执行以此if语句中的两个return语句之一结束。 <{1}}之后的函数中的行将不会被执行。

根据您的描述,您的return陈述会更好:

if

注意:假设您只使用if一次,则无需将其分配给单独的变量。