我如何观察Firefox扩展中指定的Firefox事件? [英] How can i observe a specified Firefox event in a Firefox-Extension?

查看:179
本文介绍了我如何观察Firefox扩展中指定的Firefox事件?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想等待Firefox-Browser-Events( sessionstore-windows-restored user-interaction-inactive ,..)以清除历史。我的扩展程序现在可以清除历史记录,但是我不知道如何收听这些事件。我已经在观察员通知上得到了一些信息,但我没有尝试过似乎有效的方法。



到目前为止,我的扩展代码在这里:

 (function(){

$ {
this.register();


$ mybserver $ function $
init:function()
{
try {

myObserver.prototype = {
观察:函数(主题,主题,数据){
$ b $ switch(topic){
case'sessionstore-windows-restored':
Firebug.Console.log('sessionstore-windows-restored observed');
myObj。 clearHistory();
break;
case'user-interaction-inactive':
Firebug.Console.log(用户交互惰性);
break;
case'user-interaction-active':
Firebug.Console.log('user-interaction-active');
break;


Firebug.Console.log('HUI:'+ subject +','+ topic +','+ data);
},
寄存器:函数(){
变种observerService = Components.classes [@ mozilla.org/observer-service;1\"].getService(Components.interfaces.nsIObserverService);
observerService.addObserver(this,readyToClearHistory,false);
},
注销:函数(){
变种observerService = Components.classes [@ mozilla.org/observer-service;1\"].getService(Components.interfaces.nsIObserverService);
observerService.removeObserver(this,readyToClearHistory);


$ b catch(e){
Firebug.Console.log('MIST:'+ e);
}

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

//清除一小时
globalHistory.removeVisitsByTimeframe(now - 3600,now);

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

catch(e){

//清除Open Web Location对话框的最后一个URL
var prefs = Components.classes [@ mozilla.org/喜好服务; 1\" ]的getService(Components.interfaces.nsIPrefBranch2);
尝试{
prefs.clearUserPref(general.open_location.last_url);

catch(e){
}
}
}
}
}

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

解决方案

你的代码是特定于 nsIObserver ,这意味着你的问题可能在别的地方。这个完整的例子工作:

$ $ p $ $ code var var ObserverTest = {

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

观察:function(subject,topic,data){
switch(topic){
case'sessionstore-windows-restored':
//做东西
break;
case'user-interaction-inactive':
// do stuff
break;
case'user-interaction-active':
//每隔5秒钟,当用户变为活动时立即
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);

一般来说,我觉得第一次尝试使用不熟悉的组件,就像我上面所做的一样,以便我可以将它与特定于应用程序的代码隔离,并验证我是否正确使用它。在我知道它正在工作之前,我不会把它放到更大的应用程序中去。


I want to wait for Firefox-Browser-Events (sessionstore-windows-restored, user-interaction-inactive,..) in order to clear the history. My Extension is able to clear the history on shortcut for now, but i don't know how to listen for such events. I already had a lood at observer notification, but nothing i tried seems to work.

My extension code so far is here:

   (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) {
                }
            }
              } 
  }
}

Some example code would be nice. What do i need to solve this issue?

解决方案

I don't see anything wrong with with the parts of your code that are specific to nsIObserver, which means your problem is likely somewhere else. This complete example works:

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);

In general, I find it helpful to start with something very simple the first time I attempt to use an unfamiliar component, like what I've done above, so that I can isolate it from application-specific code and verify that I'm using it correctly. I don't pull it into the larger application until I know it's working.

这篇关于我如何观察Firefox扩展中指定的Firefox事件?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆