我正在修改thunderbird的插件,并在其中一个javascript文件中找到了硬编码插件的路径。这对我来说似乎很草率,我认为必须能够以编程方式找到这条路径。然而,经过多次蠢事之后,我仍然找不到这个问题的答案。
你知道如何找到Thunderbird插件的文件夹(包含install.rdf
)的路径吗?
答案 0 :(得分:3)
您可以使用AddonManager
API:
Components.utils.import("resource://gre/modules/AddonManager.jsm");
AddonManager.getAddonByID("foo@example.com", function(addon)
{
var uri = addon.getResourceURI("install.rdf");
if (uri instanceof Components.interfaces.nsIFileURL)
{
var file = uri.file;
alert(file.parent.path);
}
});
供参考:Addon,nsIFileURL,nsIFile。
上面代码中的假设是扩展在安装时解压缩,您的前任可能会将<em:unpack>true</em:unpack>
添加到install.rdf
。通常不应指定此标志,将扩展打包在磁盘上会更好地提高性能。如果您只需要从扩展程序中读取文件,则可以使用XMLHttpRequest
,而不要求它是磁盘上的物理文件:
Components.utils.import("resource://gre/modules/AddonManager.jsm");
AddonManager.getAddonByID("foo@example.com", function(addon)
{
var uri = addon.getResourceURI("example.txt");
var request = new XMLHttpRequest("GET", uri.spec);
request.addEventListener("load", function()
{
alert(request.responseText);
}, false);
request.send();
});