3

ユーザー (すべてのユーザーが特定のグループの一部です。このアドオンは対象範囲が非常に限られています) がステータス バーから認証 Cookie のステータスを確認できるようにする Firefox アドオンに取り組んでいます。仕事関連のサイトにアクセスするには認証が必要ですが、Cookie の有効期限が切れても警告が表示されないため、煩わしく、場合によってはワークフローが大幅に中断されます。最終的に、このアドオンにより、リロードやリダイレクトを行わなくても、ステータス バーから資格情報を送信できるようになりますが、今のところ、ステータスを表示するだけです。

私は nsICookie、nsICookie2、nsICookieManager などの Mozilla 開発者ページを見てきましたが、それらが JavaScript や XUL などにどのように適合するかはあまり明確ではありません。

理想的には、JavaScript がドキュメントの外に出て、指定したドメインの Cookie 文字列を取得する方法が欲しいだけです。それができれば、コードを他のブラウザ (特に Safari と Chrome) に移植できる可能性があります。しかし、これがブラウザ固有でなければならない場合は、設定や削除の追加機能なしで Firefox に Cookie が存在するかどうかを確認する方法を少なくとも知りたいと思います。

簡単に言えば、次のように言う方法が必要です。

 if (cookieExists("sample.com", CookieName)) {
     alert("You're signed in!");
 } else {
     alert('Go sign in, you fool!');
 }

これを行うための最も簡単で移植性の高い方法は何ですか (もちろんブラウザ側)?

4

3 に答える 3

5

私は nsICookie、nsICookie2、nsICookieManager などの Mozilla 開発者ページを見てきましたが、それらのいずれかが javascript や XUL などにどのように適合するかはあまり明確ではありません。

Firefox 拡張機能からのすべての Cookie へのアクセスが可能であり、nsICookieManager および nsICookie インターフェースを使用します。拡張機能の JavaScript コードから、次のように Cookie マネージャーにアクセスします。

var cookieManager = Components.classes["@mozilla.org/cookiemanager;1"].getService(Components.interfaces.nsICookieManager);

保存されているすべての Cookie を反復処理するよりも

var enum = cookieManager.enumerator;
while (enum.hasMoreElements()){
   var cookie = enum.getNext();
   if (cookie instanceof Components.interfaces.nsICookie){
      // commands
   }
}

現在、Cookie オブジェクトへの参照がある場合、そのプロパティを確認できます

cookie.host
cookie.name
cookie.value
...

nsICookieインターフェイスで定義されています。このコードは Firefox 固有のもので、ブラウザ拡張機能または署名付きスクリプトとして実行できます。私の説明が少し役に立てば幸いです。

以下に、拡張機能で JS XPCOM インターフェイスを使用するためのリンクをいくつか示します。

  1. JS XPCOM
  2. クッキーの使用
于 2009-05-10T12:03:19.997 に答える
4

Cookie の処理に jquery プラグインを使用できます

http://www.stilbuero.de/2006/09/17/cookie-plugin-for-jquery/

または単にjavascriptを介して: http://www.quirksmode.org/js/cookies.html

于 2009-05-10T05:05:13.270 に答える
1

これは、javascript で Cookie を操作するための優れたチュートリアルです。そのチュートリアルの関数を使用すると、おそらく次のようなことができます。

if readCookie(yourCookieName != "") {
      alert("You're signed in!");
 else {
      alert("Go sign in, you fool!");
}

クッキーの機能は次のとおりです。

function readCookie(name) {
  var ca = document.cookie.split(';');
  var nameEQ = name + "=";
  for(var i=0; i < ca.length; i++) {
    var c = ca[i];
    while (c.charAt(0)==' ') c = c.substring(1, c.length); //delete spaces
    if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);
    }
  return "";
}

function createCookie(name, value, days) {
  if (days) {
    var date = new Date();
    date.setTime(date.getTime()+(days*24*60*60*1000));
    var expires = "; expires="+date.toGMTString();
    }
  else var expires = "";
  document.cookie = name+"="+value+expires+"; path=/";
}

function eraseCookie(name) {
  createCookie(name, "", -1);
}
于 2009-05-10T05:05:29.777 に答える