javascript - 火狐插件 : quit-application observer not working

标签 javascript firefox firefox-addon

一段时间以来,我一直在尝试使用观察器,但似乎无法让它们发挥作用。我将 observe 函数放在扩展的不同模块以及代码的不同部分。从任何地方注册它,但似乎我尝试过的每一种方式都只是一种 NumPy 。我无法让它工作。我的目标是监听用户何时退出 Firefox,这样我就可以清除我的插件的首选项对象。到目前为止,我的观察者在 bootstrap.js 中,这就是我实现它的方式。我以这种方式实现了我的观察功能,因为它在 this 中提到过。 stackoverflow 发帖说这是观察退出应用程序通知的正确方法。在旁注中,已注册的观察员会打印在控制台日志中,但“哦观察”不会。

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

最佳答案

简单的方法:

https://developer.mozilla.org/en-US/docs/Mozilla/JavaScript_code_modules/Services.jsm

let observer = {
  observe: function() {
         dump("oh observing")
  }
};

function startup(data, reason)
{
  Services.obs.addObserver(observer, "*", false);
  observer.observe();
}

我的建议是使用首选项创建一个日志文件;要将转储调用输出到文件,请将 browser.dom.window.dump.file 设置为应在其中创建日志的文件目标并重新启动应用程序。

https://developer.mozilla.org/en-US/docs/Mozilla/Preferences/Preference_reference/browser.dom.window.dump.file

关于javascript - 火狐插件 : quit-application observer not working,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29467362/

相关文章:

javascript - 监听输入点击的事件仅被调用一次

javascript - `Date.UTC()` 在 Firefox 上不再工作

javascript - 难道真的没有办法自动杀死 Firefox 中无响应的脚本吗?

firefox - 如何从 Firefox WebExtension 打开新标签,就像用户单击 + 打开新标签一样

javascript - css scrollLeft 动画垂直移动 body

javascript - 根据方向调整图像大小以填充 Div

javascript - 写入 ProgramData 文件夹中的数据库

javascript - 从 chrome.webRequest.onBeforeSendHeaders 中提取 cookie

javascript - 检查用户是否在线使用 Firebase 制作的聊天应用程序

html - firefox 不显示整个 Sprite 图像