我如何观察Firefox扩展中指定的Firefox事件? [英] How can i observe a specified Firefox event in a Firefox-Extension?
问题描述
我想等待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屋!