Android 如何使用nsicookieservice获取cookie更改列表

Android 如何使用nsicookieservice获取cookie更改列表,android,cookies,firefox-addon,firefox-addon-restartless,Android,Cookies,Firefox Addon,Firefox Addon Restartless,我一直在阅读,我对这项服务的通知很感兴趣:cookie已更改,cookie已被拒绝。这是否意味着我们可以获得更改或拒绝的cookie列表?这样做是否可能: var cookieSvc = Components.classes["@mozilla.org/cookieService;1"] .getService(Components.interfaces.nsICookieService); var cookies=cookieSvc.cookie-c

我一直在阅读,我对这项服务的通知很感兴趣:cookie已更改,cookie已被拒绝。这是否意味着我们可以获得更改或拒绝的cookie列表?这样做是否可能:

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

我重新阅读了文档(我确实阅读了),并搜索了许多扩展的源代码。我正在构建的扩展是为firefox for android启动的,但我没有使用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中没有发现任何更让我困惑的错误。我真的被卡住了,我需要您的帮助。

是的,您的加载项可以接收有关cookies的通知,但您不会通过cookies管理器接收通知,而是通过通用的
nsIObserverService

  • XUL覆盖加载项应直接使用
  • SDK附加组件将希望使用该模块,该模块的级别稍高一点,并在其自身完成后进行清理

还有。

谢谢你的回答,但我仍然有一些问题,如何调用观察者:我应该在“load”事件(eventListener)触发的函数中调用observe方法吗?关于这个方法的参数,我应该传递值还是由观察者捕获?我添加了一个来自cookieMonster插件的observe方法示例,向您展示我所说的内容。对不起,我的问题可能很愚蠢,但它真的让我困惑。你搞错了:你必须实现一个观察者(
observe
method)并向服务注册。当cookie发生变化时,服务将调用您的
observe
方法。重新阅读文档。我知道我必须先将observerService添加到observerService,然后再将其删除,但是在加载和卸载页面以获得想要的结果时,我会这样做吗?serviceOserver是处理observe方法的人吗?