Я пытался использовать наблюдателей какое-то время, но похоже, что я не могу заставить их работать. Я поместил функцию наблюдения в разные модули моего расширения, а также различные части моего кода. Регистрировать его повсюду, но кажется, что каждый способ, который я пробовал, был просто заглушен. Я не могу заставить его работать. Моя цель - слушать, когда пользователь выходит из Firefox, поэтому я могу очистить объекты настроек моего аддона. На данный момент мой наблюдатель находится в bootstrap.js, и именно так я его реализовал. Я реализовал функцию наблюдения таким образом, потому что в статье this stackoverflow указано, что это правильный способ наблюдения за уведомлением о выходе из приложения. На боковой ноте наблюдатели, зарегистрированные в печатном виде, печатаются в консольном журнале, но «oh observing» этого не делает.firefox addon: наблюдатель не работает
function myObserver()
{
this.register();
}
myObserver.prototype = {
observe: function(subject, topic, data) {
console.log("oh observing!!");
if (topic == "app-startup" || topic == "profile-after-change") {
var observerService = Components.classes["@mozilla.org/observer-service;1"]
.getService(Components.interfaces.nsIObserverService);
observerService.addObserver(this, "quit-application", false);
}
else if (topic == "quit-application-requested" || topic == "quit-application")
{
console.log("browser closing");
alert('hello');
myextension.Utils.prefService.clearUserPref("questionType");
myextension.Utils.prefService.clearUserPref("clickThrough");
this.unregister();
}
},
register: function() {
var observerService = Components.classes["@mozilla.org/observer-service;1"]
.getService(Components.interfaces.nsIObserverService);
observerService.addObserver(this, "quit-application-requested",false);
observerService.addObserver(this, "quit-application",false);
observerService.addObserver(this, "app-startup", false);
observerService.addObserver(this, "profile-after-change", false);
console.log("observers registered");
},
unregister: function() {
var observerService = Components.classes["@mozilla.org/observer-service;1"]
.getService(Components.interfaces.nsIObserverService);
observerService.removeObserver(this, "quit-application-requested");
console.log("unregistering obs");
}
}
Это моя функция запуска:
function startup(data, reason) {
Components.utils.import("chrome://ext/content/commons.jsm");
let wm = Cc["@mozilla.org/appshell/window-mediator;1"].
getService(Ci.nsIWindowMediator);
let windows = wm.getEnumerator("navigator:browser");
while (windows.hasMoreElements()) {
let domWindow = windows.getNext().QueryInterface(Ci.nsIDOMWindow);
WindowListener.setupBrowserUI(domWindow);
}
// Wait for any new browser windows to open
wm.addListener(WindowListener);
}
и это моя функция setupBrowserUI, в котором я зарегистрировать наблюдателя:
setupBrowserUI: function(domWindow) {
extension.onLoad(domWindow.gBrowser);
observer = new myObserver();
}