2016-07-27 20 views
1

我正在嘗試開發Firefox插件。我想統計僅標記爲HTTP的Cookie。當手動檢查時,我看到很多網站都有多個HTTP唯一cookie。但是,我的結果始終是01。我的錯在哪裏?使用Mozilla插件計算HTTP只有cookie

這裏是我的代碼:

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

在您function getCookies(host)你有一個while循環,通過指定的host所有Cookie旨在循環。但是,該循環的內部只執行一次。

在這一循環中,您有一個if聲明:

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

此語句導致函數立即返回或者是10取決於是否找到的第一個cookie擁有財產cookie.isHttpOnly作爲truefalse。 [注意:cookie始終爲0,當此if語句執行第一次也是唯一一次。]沒有其他cookie被檢查,除第一個以外,因爲您立即return的值。在if語句中,您的函數的執行在兩個return語句中的任一個上結束。 if之後的函數內的行不會被執行。

從你的描述你的願望,你的if聲明將是更好的:

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

注:既然你只使用一次cookie.isHttpOnly,就沒有必要將其分配到一個獨立的變量。

+0

非常感謝你,你的幫助和解釋是完美的。感謝您的時間!! :) – gregSTam