Javascript firefox扩展难题

Javascript firefox扩展难题,javascript,firefox,firefox-addon,Javascript,Firefox,Firefox Addon,这是让我感到困惑的东西,我的代码: var this_version=null; try { // Firefox 4 and later; Mozilla 2 and later Components.utils.import("resource://gre/modules/AddonManager.jsm"); AddonManager.getAddonByID("Mf@mafiaaf

这是让我感到困惑的东西,我的代码:

        var this_version=null;              
        try 

    {


// Firefox 4 and later; Mozilla 2 and later
        Components.utils.import("resource://gre/modules/AddonManager.jsm");
        AddonManager.getAddonByID("Mf@mafiaafire.com", function(addon) {
           // alert("My extension's version is r" + addon.version);
           this_version = addon.version;
      });
    }
    catch (ex) {
        // Firefox 3.6 and before; Mozilla 1.9.2 and before
        var em = Components.classes["@mozilla.org/extensions/manager;1"]
                 .getService(Components.interfaces.nsIExtensionManager);
        var addon = em.getItemForID("Mf@mafiaafire.com");
        //alert("My extension's version is rr" + addon.version);
       this_version = addon.version;
    }
    alert("aa:"+this_version);

    /* #### End ### */


            if (prefManager.getCharPref("extensions.mafiaafire.quickfilter_ver") != this_version) 
                {



                    //prefManager.setCharPref("extensions.mafiaafire.quickfilter_ver",this.version);
                    alert("bb:"+this_version);
                    //gBrowser.selectedTab = gBrowser.addTab(prefManager.getCharPref("extensions.mafiaafire.quickfilter_ver_change_url"));    
                }
我在FF 4上,第一个警报总是给我null,第二个警报总是给我正确的版本

但是如果我去掉第一个警报,那么第二个警报会给我空值


这没有任何意义。

关键是Firefox4代码是异步的


意思是,去获取这个插件的版本,当你得到它时,在这里调用这个函数让我知道。当您到达第一个警报时,插件管理器还没有得到它。因为在您单击警报上的“确定”之前需要一秒钟左右的时间,所以在第二个警报出现时,它确实会发出警报。

关键在于Firefox 4代码是异步的


意思是,去获取这个插件的版本,当你得到它时,在这里调用这个函数让我知道。当您到达第一个警报时,插件管理器还没有得到它。因为在您单击警报上的“确定”之前需要一秒钟左右的时间,所以在第二个警报出现时,警报确实存在。

处理警报通常意味着时间问题。@epascarello,那么如何解决它呢?处理警报通常意味着时间问题。@epascarello,那么如何解决它呢?啊哈!这是有道理的!!!现在我该如何解决这个问题?是否有某种睡眠方式或某种方式迫使它等待?我认为这在某种程度上取决于你实际想要使用的版本。如果你只是想提醒它,你可以把这个提醒放在回调函数中(就像你做的那样,但是被注释掉了)。大概你真的想以其他方式使用它,所以在这种情况下,你可能需要告诉我们更多关于你真正在做什么。没什么特别的,如果版本不等于已经安装的版本,我想打开一个页面,说明这个版本的新功能。但我认为如果每次用户使用浏览器时我都这样做,用户会非常不高兴……我认为插件管理器可能有更好的方法来做到这一点,比如每当插件升级时,它可能会自动触发一些事件,所以你可以只听那个事件。我可以想象,但这是许多插件所做的一件非常普通的事情,所以你可能想看看它们是如何做到的……谢谢,你的回答帮助了我,因为我花了一些时间来思考它。我只是将执行代码沿着执行路径进一步向下移动,并将版本检查代码向上移动。。。这延迟了每一次被解雇的时间——就像一个符咒。我希望这能帮助其他寻求同样解决方案的人。那么该死的石头!啊哈!这是有道理的!!!现在我该如何解决这个问题?是否有某种睡眠方式或某种方式迫使它等待?我认为这在某种程度上取决于你实际想要使用的版本。如果你只是想提醒它,你可以把这个提醒放在回调函数中(就像你做的那样,但是被注释掉了)。大概你真的想以其他方式使用它,所以在这种情况下,你可能需要告诉我们更多关于你真正在做什么。没什么特别的,如果版本不等于已经安装的版本,我想打开一个页面,说明这个版本的新功能。但我认为如果每次用户使用浏览器时我都这样做,用户会非常不高兴……我认为插件管理器可能有更好的方法来做到这一点,比如每当插件升级时,它可能会自动触发一些事件,所以你可以只听那个事件。我可以想象,但这是许多插件所做的一件非常普通的事情,所以你可能想看看它们是如何做到的……谢谢,你的回答帮助了我,因为我花了一些时间来思考它。我只是将执行代码沿着执行路径进一步向下移动,并将版本检查代码向上移动。。。这延迟了每一次被解雇的时间——就像一个符咒。我希望这能帮助其他寻求同样解决方案的人。那么该死的石头!
AddonManager.getAddonByID("Mf@mafiaafire.com", function(addon) {
  // alert("My extension's version is r" + addon.version);
  this_version = addon.version;
});