Сабж. Посмотрел, как это сделано в расширениях, решающих подобную задачу (OPIE, например) - сделано достаточно просто: берем список всех расширений, берем у каждого из них options URL, регэкспом выдергиваем оттуда название пакета. Но: есть энное количество расширений, у которых нет (не прописаны в install.rdf) options url, icon url, about url etc. Как ни странно, информации о chrome package вообще не содержится в экземплярах Addon, этой информации также нет в extensions.sqlite. Пока сделал так: у расширений, не имеющих информации, за которую можно было бы зацепиться, беру getResourceURI(""), отталкиваясь от этого конструирую URI к chrome.manifest, читаю его (если он есть - у джетпаков его нет), нахожу строчку, начинающуюся на content (она вроде как есть всегда), оттуда выдергиваю название пакета. Такой способ не нравится тем, что в нем много "если не, то", тем, что асинхронное чтение файлов (синхронное нельзя применить, поскольку имена пакетов всех расширений мне нужны в т.ч. при запуске FF) - нет ли другого способа быстро получить требуемое?
Отдельный пункт - джетпаки. У них, как я понимаю, имя chrome package вообще отсутствует?

hydrolizer пишет

Отдельный пункт - джетпаки. У них, как я понимаю, имя chrome package вообще отсутствует?

Не у всех: https://developer.mozilla.org/en/Extens … e.manifest
Пример: https://addons.mozilla.org/firefox/file … nifest#top

Infocatcher
Понятно, спасибо. У меня ситуация, когда надо исходить из наихудшего варианта - т.е. когда имя пакета определить нельзя никак (отсутствует chrome.manifest). Означает ли это, что и chrome package, соответствующий расширению, отсутствует? Если да - как в таком случае адресуются ресурсы внутри расширения?

hydrolizer пишет

как в таком случае адресуются ресурсы внутри расширения?

Так, вроде, никак. Без chrome.manifest с протоколом chrome:// ничего не сделать: https://bugzilla.mozilla.org/show_bug.cgi?id=564667.
Хотя file://, вроде, работает:

Выделить код

Код:

var prefsFile = new Error().fileName
    .replace(/^.* -> /, "")
    .replace(/\/?[^\/]+$/, "")
    + "/defaults/preferences/prefs.js";
Services.scriptloader.loadSubScript(prefsFile, context);

Выдает «jar:file:///D:/path/to/profile/extensions/name@some.xpi!/defaults/preferences/prefs.js», скрипт подгружается.
(хотя это то еще извращение :))