在XUL中查找资源的路径://或chrome://

时间:2010-08-18 01:44:21

标签: xul

在我的XUL应用程序中,我必须进行系统调用,这比运行单个进程更复杂,所以我用一些命令编写了一个非常简单的bash文件,并运行了一个用这个bash文件初始化的进程。

问题是如何找到文件本身的路径。通常我会使用chrome://或resource://路径来满足我的所有需求。但我需要绝对路径才能调用此文件。是否有可靠的方法来获得它?

1 个答案:

答案 0 :(得分:2)

我已经使用过这个功能

function chromeToPath (aPath) {

   if (!aPath || !(/^chrome:/.test(aPath)))
      return; //not a chrome url
   var rv;

      var ios = Components.classes['@mozilla.org/network/io-service;1'].getService(Components.interfaces["nsIIOService"]);
        var uri = ios.newURI(aPath, "UTF-8", null);
        var cr = Components.classes['@mozilla.org/chrome/chrome-registry;1'].getService(Components.interfaces["nsIChromeRegistry"]);
        rv = cr.convertChromeURL(uri).spec;

        if (/^file:/.test(rv))
          rv = this.urlToPath(rv);
        else
          rv = this.urlToPath("file://"+rv);

      return rv;
}

function urlToPath (aPath) {

    if (!aPath || !/^file:/.test(aPath))
      return ;
    var rv;
   var ph = Components.classes["@mozilla.org/network/protocol;1?name=file"]
        .createInstance(Components.interfaces.nsIFileProtocolHandler);
    rv = ph.getFileFromURLSpec(aPath).path;
    return rv;
}

From this forum post