Podobnie jak lwburk, nie sądzę, że jest dostępny za pośrednictwem interfejsów API Mozilli, ale mam pomysł, który działa, ale wygląda na skomplikowany hack. Podstawowe kroki są:
- Ustaw niestandardowy URL zasobów, aby wskazywał katalogu głównym swojego rozszerzenia
- Czytaj plik i przetwarza go na XML
- Pull id przy użyciu XPath
Dodaj następujący wiersz do pliku chrome.manifest
resource packagename-base-dir chrome/../
Następnie możemy pobrać i p ass plik z następującego kodu:
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;
}
wybrałem użyć XMLHttpRequest (w przeciwieństwie do po prostu czytanie z pliku), aby pobrać zawartość od Firefox 4, rozszerzenia niekoniecznie są rozpakowane. Jednak XMLHttpRequest będzie nadal działał, jeśli rozszerzenie pozostaje spakowane (nie testowałem tego, ale przeczytałem o tym).
Należy pamiętać, że adresy URL zasobów są wspólne dla wszystkich zainstalowanych rozszerzeń, więc jeśli packagename-base-dir
nie jest unikalny, wystąpią problemy. Być może uda Ci się wykorzystać Programmatically adding aliases, aby rozwiązać ten problem.
To pytanie skłoniło mnie do przyłączenia się do StackOverflow dziś w nocy, i czekam z niecierpliwością na kolejne ... Zobaczymy się z wami!
myślę, że mam rację, ale dodam bounty jeśli to nie zostanie odpowiedział, tylko dla piekła tego. –