#javascript #firefox-addon #exit #observer-pattern #dom-events
#javascript #firefox-дополнение #выход #наблюдатель-шаблон #dom-события
Вопрос:
Я хотел бы знать, когда пользователь собирается закрыть приложение Firefox (alt F4 или кнопка закрыть). Я пробовал onbeforeunload
, это работает, но только когда пользователь нажимает File>> exit. Я написал observer и использовал событие quit-application, чтобы узнать, когда пользователь завершает работу, но событие не запускается!
var ObserverTest = {
register: function() {
var observerService = Components.classes["@mozilla.org/observer-service;1"]
.getService(Components.interfaces.nsIObserverService);
// observerService.addObserver(ObserverTest, "user-interaction-active", false);
observerService.addObserver(ObserverTest, "quit-application",false);
},
observe: function(subject, topic, data) {
switch (topic) {
case 'sessionstore-windows-restored':
// do stuff
break;
case 'user-interaction-inactive':
// do stuff
var url = "http://localhost:13000";
var params = "q=hello";
var req = Components.classes["@mozilla.org/xmlextras/xmlhttprequest;1"].createInstance();
req.open('POST', url, true);
req.send('your=dataamp;and=moreamp;stuff=here');
break;
case 'user-interaction-active':
// every 5 seconds and immediately when user becomes active
break;
case 'quit-application':
obs.removeObserver(this, "quit-application");
alert('hello');
break;
case 'quit-application-requested':
alert("hello");
break;
}
},
unregister: function() {
var observerService = Components.classes["@mozilla.org/observer-service;1"]
.getService(Components.interfaces.nsIObserverService);
// observerService.removeObserver(ObserverTest, "user-interaction-active");
observerService.removeObserver(ObserverText,"quit-application");
}
}
Ответ №1:
Я предполагаю, что это из-за ошибки в вашем операторе case:
регистр 'завершение работы приложения': obs.removeObserver (это, "выйти из приложения"); оповещение ('привет'); перерыв; случай "запрошено завершение работы приложения": оповещение ("привет"); перерыв;
Где определяется «obs»?