首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Firefox扩展中观察指定的Firefox事件?

如何在Firefox扩展中观察指定的Firefox事件?
EN

Stack Overflow用户
提问于 2011-03-03 16:01:32
回答 1查看 2.1K关注 0票数 2

我想等待火狐浏览器事件(sessionstore-windows-restoreduser-interaction-inactive,.)为了澄清历史。目前,我的扩展可以在快捷方式上清除历史,但我不知道如何侦听这样的事件。我已经在观察员通知上看过了,但我尝试过的一切似乎都不管用。

到目前为止,我的分机代码在这里:

代码语言:javascript
复制
   (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) {
                }
            }
              } 
  }
}

一些示例代码会很好。我需要什么来解决这个问题?

EN

Stack Overflow用户

回答已采纳

发布于 2011-03-03 16:32:55

我不认为您的代码中特定于nsIObserver的部分有什么问题,这意味着您的问题可能发生在其他地方。这个完整的示例工作如下:

代码语言:javascript
复制
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);

一般来说,当我第一次尝试使用一个不熟悉的组件时,我发现从一些非常简单的东西开始是有帮助的,就像我上面所做的那样,这样我就可以将它从特定于应用程序的代码中分离出来,并验证我是否正确地使用了它。我不会把它拉到更大的应用程序,直到我知道它是有效的。

票数 7
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5183230

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档