Pull to refresh

Do You Know How To: «Preferences» и «Install Location» в FireFox 4 betas?

Reading time3 min
Views837
Здравствуй хабр.

Являясь разработчиком дополнения к FireFox решил написать свои мысли по мотивам недавней статьи «Совместимость дополнений с Firefox 4...» от одного известного автора.

В мыслях меня интересовало то, что вынесено в заголовок, а именно объект Preferences и как получить путь к «Install Location».

Под катом код и описание к нему.



Как нетрудно догадаться большая часть уже написана и в той статье, а конкретно стоило, конечно обратить внимание на это.

Тем не менее, не все сразу ясно и понятно, поэтому проведя ревизию своего дополнения я решил рассказать Вам, ну, вдруг кому-нибудь будет интересно?

Мое дополнение активно работает с Preferences и файловой системой, конкретно с папкой, в которой само и лежит, там хранится библиотека книг. Поэтому, когда я пару недель назад узнал, что в 4й версии ничего не работает, я решил заняться этим на досуге. Досуг случился сегодня, и вот что мне открылось.

Сразу оговорюсь об используемых мной сокращениях:

var CI = Components.interfaces;<br>
var CC = Components.classes;<br>
var pref = "ветка вашего дополнения в preferences " // у меня "extensions.kbtrainerff."<br>
var ext_id = "id вашего дополнения" // у меня "kbtrainerff@gmail.com"



Теперь, пожалуй, начнем.

Preferences :



Было:

preferences_object = CC["@mozilla.org/preferences-service;1"].getService(CI.nsIPrefService).getBranch(pref);


Стало:

var CU = Components.utils<br>CU.import("resource://gre/modules/Services.jsm");<br>preferences_object = Services.prefs.getBranch(pref);


Определение пути к папке дополнения:



Тождественно равно к вашему [addon | extension | «приложению»].

Было:

preferences_object = CC["@mozilla.org/extensions/manager;1"].getService(CI.nsIExtensionManager).getInstallLocation(ext_id);


Стало:

Это была проблема, но, как оказалось, порывшись в объектной модели и в «document.location = about:config» – она вполне решаема.
Решение, спорное, но имеющееся:

var CU = Components.utils<br>CU.import("resource://gre/modules/Services.jsm");<br>var ic = Services.prefs.getBranch("extensions.");<br>var ics = eval(ic.getCharPref("installCache"));<br><br>for(var i = 0; i < ics.length; i++){<br>    var obj = ics[i];<br>    if(obj.name == "app-profile"){<br>        if(obj["addons"] != undefined){<br>            if(obj["addons"][ext_id] != undefined){<br>                if(obj["addons"][ext_id]["descriptor"] != undefined){<br>                    extdir = obj["addons"][ext_id]["descriptor"];<br>                    break;<br>                }<br>            }<br>        }<br>    }<br>}<br><br>alert(extdir);


Делаем это файлом.

var theFile = CC[@mozilla.org/file/local;1"].createInstance(CI.nsILocalFile);<br>Install_Location = theFile.initWithPath(extdir);


На этом всё :)

Наслаждайтесь!

* This source code was highlighted with Source Code Highlighter.

UPD : свежий kbTrainer 0.1.2 for FireFox
Tags:
Hubs:
+3
Comments4

Articles