Pregunta

en breve: ¿Hay alguna forma de encontrar la ruta completa del directorio actual de una aplicación xul?

explicación larga:

Me gustaría abrir algunos archivos html en una aplicación de navegador xul.La ruta a los archivos html debe establecerse mediante programación desde la aplicación xul.Los archivos html residen fuera de la carpeta de mi aplicación xul, pero en el mismo nivel.(Los usuarios retirarán ambas carpetas desde SVN, no hay instalación disponible para la aplicación xul)

Abrió bien los archivos si configuro una ruta completa como "file:///c: emp\processing-sample\index.html"

Lo que quiero hacer es abrir el archivo relativo a mi aplicación xul.

Descubrí que puedo abrir la ruta del perfil del usuario:

var DIR_SERVICE = new Components.Constructor("@mozilla.org/file/directory_service;1", "nsIProperties");
var path = (new DIR_SERVICE()).get("UChrm", Components.interfaces.nsIFile).path;
var appletPath;

// find directory separator type
if (path.search(/\\/) != -1)
{
appletPath = path + "\\myApp\\content\\applet.html"
}
else
{
appletPath = path + "/myApp/content/applet.html"
}

// Cargar el applet en el iframe
var appletFile = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
appletFile.initWithPath(appletPath);
var appletURL = Components.classes["@mozilla.org/network/protocol;1?name=file"].createInstance(Components.interfaces.nsIFileProtocolHandler).getURLSpecFromFile(appletFile);
var appletFrame = document.getElementById("appletFrame");
appletFrame.setAttribute("src", appletURL); 

¿Hay alguna forma de encontrar la ruta completa del directorio actual de una aplicación xul?

¿Fue útil?

Solución

Encontré una solución: http://developer.mozilla.org/en/Code_snippets/File_I%2F%2FO No puedo abrir exactamente un archivo usando una ruta relativa "../../index.html", pero puedo obtener el directorio de la aplicación y trabajar con él.

var DIR_SERVICE = new Components.Constructor("@mozilla.org/file/directory_service;1", "nsIProperties");
var path = (new DIR_SERVICE()).get(resource:app, Components.interfaces.nsIFile).path;
var appletPath;

Otros consejos

Sí, los archivos html dentro de su extensión se pueden abordar mediante URI de Chrome.Un ejemplo de una de mis extensiones:

content.document.location.href = "chrome://{appname}/content/logManager/index.html"

En una aplicación xul, puede acceder a la carpeta Chrome de la aplicación mediante una URL de Chrome.

Tengo relativamente poca experiencia con el elemento, por lo que no estoy seguro de si esto funcionará exactamente para usted.Esta es la forma en que incluye archivos fuente de JavaScript en su archivo xul:

<script src="chrome://includes/content/XSLTemplate.js" type="application/x-javascript"/>

Entonces, tal vez si el archivo reside en c:\applicationFolder\chrome\content\index.html, pueda acceder a él en:

chrome://content/index.html 

de alguna manera.

También puedes mirar jslib, una biblioteca que simplifica muchas cosas, incluida la E/S de archivos.IIRC, aunque tuve problemas para llegar a una ruta relativa usando '../'.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top