2016-07-27 29 views
1

Ich versuche ein Firefox Add-on zu entwickeln. Ich möchte die Cookies zählen, die nur als HTTP markiert sind. Bei der manuellen Überprüfung habe ich festgestellt, dass auf vielen Websites mehr als nur HTTP-Cookies vorhanden sind. Aber mein Ergebnis ist immer 0 oder 1. Wo ist meine Schuld?Zähle nur HTTP-Cookies mit Mozilla-Add-on

Hier ist mein Code:

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); 
}); 

Antwort

1

Innerhalb Ihres function getCookies(host) Sie haben eine while Schleife, die Schleife durch alle Cookies für den angegebenen host gedacht. Der innere Teil dieser Schleife wird jedoch nur einmal ausgeführt.

Innerhalb dieser Schleife Sie haben eine if Aussage:

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

Diese Aussage ergibt die Funktion sofort zurückkehrt entweder eine 1 oder ein 0 je nachdem, ob das erste Cookie hat die Eigenschaft gefunden cookie.isHttpOnly als true oder false. [Hinweis: cookie ist immer 0, wenn diese if Anweisung zum ersten und einzigen Mal ausgeführt wird.] Keine anderen Cookies werden als die erste überprüft, weil Sie sofort return den Wert. Die Ausführung Ihrer Funktion endet an einer der beiden return Anweisungen innerhalb dieser if Anweisung. Die Zeilen innerhalb der Funktion nach if werden nicht ausgeführt.

Von dem, was Sie beschreiben, die Sie wünschen, Ihre if Aussage wäre besser als:

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

Hinweis: Da Sie nur cookie.isHttpOnly einmal verwenden, gibt es keine Notwendigkeit, es zu einer separaten Variablen zugewiesen werden.

+0

Vielen Dank, Ihre Hilfe und Erklärung war perfekt. Vielen Dank für Ihre Zeit!! :) – gregSTam