0

nsicookieservice に関する MDN ドキュメントを読んでいて、このサービスの通知 (cookie-changed と cookie-rejected) に興味があります。これは、変更または拒否された Cookie のリストを取得できるということですか? 次のようなことを行うことでそれが可能になりますか?

    var cookieSvc = Components.classes["@mozilla.org/cookieService;1"]
              .getService(Components.interfaces.nsICookieService);
    var cookies=cookieSvc.cookie-changed;

ご説明ありがとうございます。

私はドキュメンテーションを読み直し (実際に読みました)、多くの拡張機能のソース コードを検索しました。私が構築している拡張機能が Android 用の firefox 用に起動されているが、SDK を使用していないという問題。私が理解したことに基づいて、私はこれを書きました:

  var cookieMonster = {
//cookieManager: null,
current: null,
observerService: null,
cookieService: null,
init: function() {
this.observerService = Components.classes["@mozilla.org/observer-service;1"].getService(Components.interfaces.nsIObserverService);
this.observerService.addObserver(this, "cookie-changed", false);
this.cookieService = Components.classes["@mozilla.org/cookieService;1"].getService(Components.interfaces.nsICookieService);
//  this.cookieManager = Components.classes["@mozilla.org/cookiemanager;1"].getService(Components.interfaces.nsICookieManager);
},
uninit: function() {
//var observerService = Components.classes["@mozilla.org/observer-service;1"].getService(Components.interfaces.nsIObserverService);
this.observerService.removeObserver(this, "cookie-changed", false);
//this.cookieManager = Components.classes["@mozilla.org/cookiemanager;1"].getService(Components.interfaces.nsICookieManager);
},
observe: function(subject, topic, data) {
    if (topic != 'cookie-changed') { this.current= "no cookie changed"; return; }
    try {
    //  if (!ghostery.prefs.cookieProtect) { return; }
    this.current="there is a chnged cookie!!!";
    if ( (data == 'added') || (data == 'changed') ) {
    var cookie = subject.QueryInterface(Components.interfaces.nsICookie2);
    this.current = "name "+cookie.name+" host "+cookie.host;
        }
    } catch (err) {}
  }
    };

次に、ページをロードするときにオブザーバーを追加するためにこれを行います。

    let addListener = function() {
    window.BrowserApp.deck.addEventListener("load", cookieMonster.init, false);
    window.NativeWindow.toast.show(cookieMonster.current, "long");
    };
    if(window.BrowserApp.deck) {
    // BrowserApp.deck (and maybe whole BrowserApp?) has been initialized
    addListener();
    }
    else {
    // use the chrome window to wait for BrowserApp to initialize
    window.BrowserApp.deck.addEventListener("UIReady", addListener);
    }

それは機能せず、logcat でさらに混乱するエラーは見つかりません。本当に行き詰まっており、あなたの助けが必要です。

4

1 に答える 1

0

はい、アドオンは Cookie に関する通知を受け取ることができますが、Cookie マネージャー経由ではなく、一般的な目的で受け取りますnsIObserverService

  • XUL オーバーレイ アドオンは をnsIObserverService直接使用する必要があります。
  • SDK アドオンは、system/events代わりにモジュールを使用する必要があります。これは、少し高いレベルであり、それ自体の後でクリーンアップを行います。

最も一般的に使用される通知タイプのリストもあります。

于 2013-08-21T19:18:53.823 に答える