像 lwburk 一样,我不认为它可以通过 Mozilla 的 API 获得,但我有一个可行的想法,但它似乎是一个复杂的 hack。基本步骤是:
- 设置自定义资源 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;
}
我选择使用 XMLHttpRequest(而不是简单地从文件中读取)来检索内容,因为在 Firefox 4 中,扩展不一定是解压缩的。但是,如果扩展仍然打包,XMLHttpRequest 仍然可以工作(尚未对此进行测试,但已经阅读过)。
请注意,资源 URL 由所有已安装的扩展共享,因此如果packagename-base-dir
不是唯一的,您将遇到问题。您也许可以利用以编程方式添加别名来解决此问题。
这个问题促使我今晚加入了 StackOverflow,我期待更多的参与……我会见到你们的!