Как и lwburk, я не думаю, что он доступен через API Mozilla, но у меня есть идея, которая работает, но это похоже на сложный взлом. Основные шаги:
- Настройка пользовательского URL-адреса ресурса, указывающего на базовый каталог вашего расширения
- Прочитать файл и разобрать его в XML
- Вытащите идентификатор, используя XPath
Добавьте следующую строку в файл chrome.manifest
resource packagename-base-dir chrome/../
Затем мы можем получить и проанализировать файл с помощью следующего кода:
function myId(){
var req = new XMLHttpRequest();
// synchronous request
req.open('GET', "resource://packagename-base-dir/install.rdf", false);
req.send(null);
if( req.status !== 0){
throw("file not found");
}
var data = req.responseText;
// this is so that we can query xpath with namespaces
var nsResolver = function(prefix){
var ns = {
"rdf" : "http://www.w3.org/1999/02/22-rdf-syntax-ns#",
"em" : "http://www.mozilla.org/2004/em-rdf#"
};
return ns[prefix] || null;
};
var parser = CCIN("@mozilla.org/xmlextras/domparser;1", Ci.nsIDOMParser);
var doc = parser.parseFromString(data, "text/xml");
// you might have to change this xpath expression a bit to fit your setup
var myExtId = doc.evaluate("//em:targetApplication//em:id", doc, nsResolver,
Ci.nsIDOMXPathResult.FIRST_ORDERED_NODE_TYPE, null);
return myExtId.singleNodeValue.textContent;
}
Я решил использовать XMLHttpRequest (в отличие от простого чтения из файла) для извлечения содержимого, поскольку в Firefox 4 расширения не обязательно распаковываются. Однако XMLHttpRequest все равно будет работать, если расширение остается упакованным (не проверял это, но читал об этом).
Обратите внимание, что URL-адреса ресурсов являются общими для всех установленных расширений, поэтому, если packagename-base-dir
не уникален, у вас возникнут проблемы. Вы можете использовать Программно добавляя псевдонимы для решения этой проблемы.
Этот вопрос побудил меня присоединиться к StackOverflow сегодня вечером, и я с нетерпением жду возможности участвовать еще ... Увидимся, ребята!