xul:在xul浏览器中打开相对于" myapp.xul"的本地html文件
时间:2020-03-06 14:27:12 来源:igfitidea点击:
简而言之:有什么方法可以找到xul应用程序的当前目录的完整路径吗?
详细说明:
我想在xul浏览器应用程序中打开一些html文件。 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应用程序的当前目录的完整路径吗?
解决方案
我找到了一种解决方法: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;
在xul应用程序中,我们可以使用Chrome网址访问该应用程序的chrome文件夹。
我对这个元素的经验还很少,所以我不确定这是否完全适合我们。这是在xul文件中包含javascript源文件的方式:
<script src="chrome://includes/content/XSLTemplate.js" type="application/x-javascript"/>
因此,如果文件位于c:\ applicationFolder \ chrome \ content \ index.html,则可以在以下位置访问它:
chrome://content/index.html
以某种方式。
我们可能还会看到jslib,这是一个简化了很多事情的库,包括文件I / O。 IIRC,但是我很难使用'../'到达相对路径。
是的,我们扩展名内的html文件可以使用chrome URI寻址。
来自我的扩展之一的示例:
content.document.location.href = "chrome://{appname}/content/logManager/index.html"