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 回答