Javascript 使用Mozilla加载项统计仅限HTTP的Cookie

Javascript 使用Mozilla加载项统计仅限HTTP的Cookie,javascript,cookies,firefox-addon,firefox-addon-sdk,mozilla,Javascript,Cookies,Firefox Addon,Firefox Addon Sdk,Mozilla,我正在尝试开发一个Firefox插件。我想计算标记为仅HTTP的Cookie。当手动检查时,我看到许多网站都有不止一个HTTP专用cookie。但是,我的结果总是0或1。我的错在哪里 这是我的密码: var{Cc,Ci,Cu}=require(“chrome”); 特写:进口resource://gre/modules/Services.jsm"); var cookieManager=Cc[“@mozilla.org/cookieManager;1”].getService(Ci.nsicok

我正在尝试开发一个Firefox插件。我想计算标记为仅HTTP的Cookie。当手动检查时,我看到许多网站都有不止一个HTTP专用cookie。但是,我的结果总是
0
1
。我的错在哪里

这是我的密码:

var{Cc,Ci,Cu}=require(“chrome”);
特写:进口resource://gre/modules/Services.jsm");
var cookieManager=Cc[“@mozilla.org/cookieManager;1”].getService(Ci.nsicokiemanager2);
变量选项卡=需要(“sdk/选项卡”);
tabs.on('load',函数(tab){
var URL=tab.URL;
var url=require(“sdk/url”).url(url);
var host=url.host;
函数getCookies(主机){
var cookies=cookieManager.getCookiesFromHost(主机);
var计数=0;
while(cookies.hasMoreElements()){
var cookie=cookies.getNext().QueryInterface(Ci.nsICookie2);
//var计数=0;
var httpCookie=cookie.isHttpOnly;
if(httpCookie){
返回计数=计数+1;
}否则{
返回0;
}
日志(“Cookie主机:+Cookie.host+”;Cookie名称:+Cookie.Name
+=Cookie值:“+Cookie.value+”\n”);
转储(“\tCookie主机:“+cookie.host+”是域cookie:“+cookie.isDomain”
+“Cookie名称:“+Cookie.Name+”=Cookie值:“+Cookie.value”
+是会话Cookie:+Cookie.isSession
+“到期时间:”+cookie.expiration
+“它是一个仅限Http的cookie:“+cookie.isHttpOnly+”\n”);
}
返回计数;
}
var getResult=getCookies(主机);
log(“Http Cookies:+getResult”);
});

函数getCookies(主机)
中,您有一个
while
循环,用于循环指定
主机的所有cookie。但是,该循环的内部部分只执行一次

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

var httpCookie = cookie.isHttpOnly;
if(httpCookie){
    return count=count+1 ;
}else{
    return 0;
}
此语句导致函数立即返回
1
0
,具体取决于找到的第一个cookie是否具有属性
cookie。Ishtponly
true
false
。[注意:
cookie
在第一次也是唯一一次执行此
if
语句时始终为
0
。]除第一个cookie外,不会检查其他cookie,因为您会立即
返回值。函数的执行在此
if
语句中的两条
return
语句中的任意一条结束。函数中
if
后面的行将不会执行

根据您所描述的需求,您的
if
语句会更好,如下所示:

if(cookie.isHttpOnly){
    count++;
}

注意:由于您只使用了
cookie.ishtponly
一次,因此无需将其分配给单独的变量。

非常感谢,您的帮助和解释非常完美。谢谢你抽出时间!!:)