lwburkのように、MozillaのAPIを介して利用できるとは思いませんが、うまくいくアイデアはありますが、複雑なハックのようです。基本的な手順は次のとおりです。
- 拡張機能のベースディレクトリを指すようにカスタムリソースURLを設定します
- ファイルを読み取り、XMLに解析します
- XPathを使用してIDを引き出します
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;
}
Firefox 4では拡張機能が必ずしも解凍されていないため、コンテンツを取得するために(単にファイルから読み取るのではなく)XMLHttpRequestを使用することを選択しました。ただし、拡張機能がパックされたままの場合、XMLHttpRequestは引き続き機能します(これはテストされていませんが、読んでいます)。
packagename-base-dir
リソースのURLは、インストールされているすべての拡張機能で共有されているため、一意でない場合は問題が発生することに注意してください。プログラムでエイリアスを追加することで、この問題を解決できる場合があります。
この質問は私に今夜StackOverflowに参加するように促しました、そして私はもっと参加するのを楽しみにしています...私はあなたたちの周りに会うでしょう!