1

Firefoxのアドオンを開発しようとしています。私はHTTPだけとしてマークされているクッキーを数えたいと思います。手動でチェックすると、多くのWebサイトに複数のHTTP専用Cookieがあることがわかりました。しかし、私の結果は常に0または1です。私の欠点はどこですか?内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)指定hostのすべてのCookieをループするために意図されwhileループを持っている:

は、ここに私のコードです。しかし、そのループの内部は一度だけ実行されます。

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

最初に見つかったクッキーがtrueまたはfalseとしての特性cookie.isHttpOnlyを持っている場合、関数でこの文の結果がすぐに1かに応じて0のいずれかを返す:あなたはif文を持っているループ内の

。 [cookieは、このif文が初めて実行されたときは常に0です。すぐに値がreturnになるため、最初のもの以外のクッキーはチェックされません。関数の実行は、ifステートメント内の2つのreturnステートメントのいずれかで終了します。 if以降の関数内の行は実行されません。

あなたが望む記述したものから、あなたのif文はとして良いだろう:

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

注:あなたは一度だけcookie.isHttpOnlyを使用することを考えると、別の変数に代入する必要はありません。

+0

大変ありがとうございました。あなたの助けと説明は完璧でした。あなたの時間をありがとう! :) – gregSTam

関連する問題