Найти путь к ресурсу: // или chrome: // в XUL - PullRequest
1 голос
/ 18 августа 2010

В моем приложении XUL я должен сделать системный вызов, который более сложен, чем запуск одного процесса, поэтому я написал очень простой файл bash с парой команд и запустил процесс, инициализированный этим файлом bash. *

Проблема в том, как найти путь к самому файлу. Обычно я использую chrome: // или resource: // paths для всего, что мне нужно. Но мне нужен абсолютный путь для вызова этого файла. Есть ли надежный способ получить его?

1 Ответ

2 голосов
/ 18 августа 2010

Я использовал эту функцию

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;
}

Из этого сообщения на форуме .

...