Как я могу наблюдать указанное событие Firefox в Firefox-Extension? - PullRequest
2 голосов
/ 03 марта 2011

Я хочу дождаться Firefox-Browser-Events (sessionstore-windows-restored, user-interaction-inactive, ..), чтобы очистить историю.Мое расширение в настоящее время может очистить историю по ярлыку, но я не знаю, как прослушивать такие события.У меня уже было настроение на уведомление наблюдателя , но, похоже, ничего из того, что я пробовал, не работает.

Мой код расширения находится здесь:

   (function() {

    (window.myObj =
    {
        myObserver : function()
        {
          this.register();
        },

        init : function()
        {
            try {

                myObserver.prototype = {
                    observe: function(subject, topic, data){

                        switch (topic) {
                          case 'sessionstore-windows-restored':
                            Firebug.Console.log('sessionstore-windows-restored observed');
                            myObj.clearHistory();
                            break;
                          case 'user-interaction-inactive':
                            Firebug.Console.log('user-interaction-inactive');
                            break;
                          case 'user-interaction-active':
                            Firebug.Console.log('user-interaction-active');
                            break;
                        }

                        Firebug.Console.log('HUI :' + subject + ','+topic+','+data);
                    },
                    register: function(){
                        var observerService = Components.classes["@mozilla.org/observer-service;1"].getService(Components.interfaces.nsIObserverService);
                        observerService.addObserver(this, "readyToClearHistory", false);
                    },
                    unregister: function(){
                        var observerService = Components.classes["@mozilla.org/observer-service;1"].getService(Components.interfaces.nsIObserverService);
                        observerService.removeObserver(this, "readyToClearHistory");
                    }
                }
            }
            catch (e) {
                Firebug.Console.log('MIST :' + e);
            }

            observer = new myObserver();
         },
         clearHistory : function(){
            var globalHistory = Components.classes["@mozilla.org/browser/global-history;2"].getService(Components.interfaces.nsIBrowserHistory);
            var now = Date.now();

            // clear one hour
            globalHistory.removeVisitsByTimeframe(now - 3600, now);

            try {
                var os = Components.classes["@mozilla.org/observer-service;1"].getService(Components.interfaces.nsIObserverService);
                os.notifyObservers(null, "browser:purge-session-history", "");
            } 
            catch (e) {

                // Clear last URL of the Open Web Location dialog
                var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch2);
                try {
                    prefs.clearUserPref("general.open_location.last_url");
                } 
                catch (e) {
                }
            }
              } 
  }
}

Некоторыепример кода был бы хорош.Что мне нужно, чтобы решить эту проблему?

1 Ответ

7 голосов
/ 03 марта 2011

Я не вижу ничего плохого в частях вашего кода, относящихся к nsIObserver, что означает, что ваша проблема, скорее всего, где-то еще.Этот полный пример работает:

var ObserverTest = {

    register: function() {
        var observerService = Components.classes["@mozilla.org/observer-service;1"]
            .getService(Components.interfaces.nsIObserverService);
        observerService.addObserver(ObserverTest, "user-interaction-active", false);
    },

    observe: function(subject, topic, data) {
        switch (topic) {
            case 'sessionstore-windows-restored':
                // do stuff
                break;
            case 'user-interaction-inactive':
                // do stuff
                break;
            case 'user-interaction-active':
                // every 5 seconds and immediately when user becomes active
                alert("active"); 
                break;
        }
    },

    unregister: function() {
        var observerService = Components.classes["@mozilla.org/observer-service;1"]
            .getService(Components.interfaces.nsIObserverService);
        observerService.removeObserver(ObserverTest, "user-interaction-active");
    }
}

window.addEventListener("load", ObserverTest.register, false);
window.addEventListener("unload", ObserverTest.unregister, false);

В общем, я считаю полезным начать с чего-то очень простого, когда я впервые пытаюсь использовать незнакомый компонент, например, что я делал выше, чтобы я могизолируйте его от кода приложения и убедитесь, что я правильно его использую.Я не использую его в большем приложении, пока не узнаю, что оно работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...