首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >firefox addon:无法侦听firefox "quit-application“事件

firefox addon:无法侦听firefox "quit-application“事件
EN

Stack Overflow用户
提问于 2011-12-13 00:10:31
回答 1查看 660关注 0票数 4

我有以下代码片段,用于在firefox退出后启用扩展。

代码语言:javascript
复制
observe: function (subject, topic, data) {

     if (topic == "quit-application") {
         LOG("inside quit-application Testing ");
         var os = Components.classes["@mozilla.org/observer-service;1"]
             .getService(Components.interfaces.nsIObserverService);

         //os.addObserver(this, "http-on-examine-cached-response", false);
         os.addObserver(this, "quit-application", false);
         var appInfo = Components.classes["@mozilla.org/xre/app-info;1"]
             .getService(Components.interfaces.nsIXULAppInfo);
         var tempappVersion = appInfo.version;
         var appVersion = tempappVersion.split(".");
         // adding add-on listener dsable event on add-on for FF4 and later versions.
         if (appVersion[0] >= 4) {
             setAddonEnableListener();
             LOG("\napp-startup Testing from javascript file....");
         }
         return;
     }
}

setAddonEnableListener中,我尝试像这样启用扩展:

代码语言:javascript
复制
function setAddonEnableListener() {
    try {
    alert("setAddonEnableListener akbar nsListener called from ");
        Components.utils.import("resource://gre/modules/AddonManager.jsm");
    AddonManager.getAddonByID("somename@extension.com", function(addon)
    {
    if (addon.userDisabled)
        addon.userDisabled = false;
    });

    } catch (ex) {
    }
}

我按如下方式注册quit-application事件var

代码语言:javascript
复制
myModule = {
    registerSelf: function (compMgr, fileSpec, location, type) {
        var compMgr = compMgr.QueryInterface(Components.interfaces.nsIComponentRegistrar);
        compMgr.registerFactoryLocation(this.myCID,
                                        this.myName,
                                        this.myProgID,
                                        fileSpec,
                                        location,
                                        type);

        var catMgr = Components.classes["@mozilla.org/categorymanager;1"].getService(Components.interfaces.nsICategoryManager);
        catMgr.addCategoryEntry("app-startup", this.myName, this.myProgID, true, true);
        catMgr.addCategoryEntry("quit-application", this.myName, this.myProgID, true, true);
    }

当火狐退出时,不会显示inside quit-application Testing消息。我在这里做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-12-13 16:15:33

没有类别quit-application。您应该会收到app-startup通知(或者更确切地说,是从Firefox4开始的profile-after-change ),并为quit-application注册您的观察者

代码语言:javascript
复制
observe: function (subject, topic, data) {
   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") {
     var observerService = Components.classes["@mozilla.org/observer-service;1"]
                                     .getService(Components.interfaces.nsIObserverService);
     observerService.removeObserver(this, "quit-application");
     ...
   }
}

引用the documentation

除非另有说明,否则您可以使用nsIObserverService注册主题。

而且在任何关机通知上都没有关于通过类别管理器进行注册的说明。

顺便说一句,我真诚地推荐XPCOMUtils作为组件注册工具。您不需要自己编写模块定义。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8477222

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档