xul: открыть локальный html-файл относительно «myapp.xul» в браузере xul - PullRequest
3 голосов
/ 19 сентября 2008

короче: есть ли способ найти полный путь к текущему каталогу приложения xul?

длинное объяснение:

Я хотел бы открыть некоторые html-файлы в браузерном приложении xul. Путь к html-файлам должен быть установлен программно из приложения xul. Файлы html находятся вне папки моего приложения xul, но на том же уровне. (пользователи будут извлекать обе папки из SVN, установка для приложения xul недоступна)

Это открыло файлы очень хорошо, если я установил полный путь как "file: /// c: \ temp \ processing-sample \ index.html"

я хочу открыть файл, относящийся к моему приложению xul.

Я обнаружил, что могу открыть путь к профилю пользователя:

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

есть ли способ найти полный путь к текущему каталогу приложения xul?

Ответы [ 3 ]

2 голосов
/ 25 февраля 2009

Да, html-файлы в вашем расширении могут быть адресованы с использованием chrome URI Пример из одного из моих расширений:

content.document.location.href = "chrome://{appname}/content/logManager/index.html"
2 голосов
/ 19 сентября 2008

Я нашел обходной путь: http://developer.mozilla.org/en/Code_snippets/File_I%2F%2FO Я не могу точно открыть файл, используя относительный путь "../../index.html", но я могу получить каталог приложения и работать с ним.

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;
0 голосов
/ 20 сентября 2008

В приложении xul вы можете получить доступ к папке chrome приложения, используя URL-адрес chrome.

У меня сравнительно небольшой опыт работы с элементом, поэтому я не уверен, что это сработает именно для вас. Это способ, которым вы включаете исходные файлы javascript в свой файл xul:

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

Таким образом, возможно, если файл находится по адресу c: \ applicationFolder \ chrome \ content \ index.html, вы можете получить к нему доступ по адресу:

chrome://content/index.html 

некоторым образом.

Вы также можете взглянуть на jslib , библиотеку, которая упрощает многие вещи, включая файловый ввод / вывод. IIRC, у меня были проблемы с тем, чтобы найти относительный путь, используя "../".

...