пазл с расширением firefox - PullRequest
1 голос
/ 19 мая 2011

Это то, что удивляет меня, мой код:

        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, и первое предупреждение всегда дает мне ноль, а второе предупреждение - правильную версию.

Но если я уберу первое предупреждение, то второе предупреждение даст мне ноль !!!!

Это просто не имеет никакого смысла.

1 Ответ

4 голосов
/ 19 мая 2011

Ключ в том, что код Firefox 4 асинхронный .

AddonManager.getAddonByID("Mf@mafiaafire.com", function(addon) {
  // alert("My extension's version is r" + addon.version);
  this_version = addon.version;
});

означает, что вы получите версию этого аддона, и когда вы ее получите, дайте мне знать, вызвав эту функцию здесь. Когда вы получаете первое предупреждение, менеджер аддонов еще не получил его. Поскольку до нажатия кнопки ОК в предупреждении требуется примерно секунда, он получает к моменту получения второго предупреждения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...