Здравствуй хабр.
Являясь разработчиком дополнения к FireFox решил написать свои мысли по мотивам недавней статьи «Совместимость дополнений с Firefox 4...» от одного известного автора.
В мыслях меня интересовало то, что вынесено в заголовок, а именно объект Preferences и как получить путь к «Install Location».
Под катом код и описание к нему.
Как нетрудно догадаться большая часть уже написана и в той статье, а конкретно стоило, конечно обратить внимание на это.
Тем не менее, не все сразу ясно и понятно, поэтому проведя ревизию своего дополнения я решил рассказать Вам, ну, вдруг кому-нибудь будет интересно?
Мое дополнение активно работает с Preferences и файловой системой, конкретно с папкой, в которой само и лежит, там хранится библиотека книг. Поэтому, когда я пару недель назад узнал, что в 4й версии ничего не работает, я решил заняться этим на досуге. Досуг случился сегодня, и вот что мне открылось.
Сразу оговорюсь об используемых мной сокращениях:
Теперь, пожалуй, начнем.
Было:
Стало:
Тождественно равно к вашему [addon | extension | «приложению»].
Было:
Стало:
Это была проблема, но, как оказалось, порывшись в объектной модели и в «document.location = about:config» – она вполне решаема.
Решение, спорное, но имеющееся:
Делаем это файлом.
На этом всё :)
Наслаждайтесь!
* This source code was highlighted with Source Code Highlighter.
UPD : свежий kbTrainer 0.1.2 for FireFox
Являясь разработчиком дополнения к 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