如何将HTML文件加载到<editor> </editor>中

时间:2012-07-15 20:24:04

标签: javascript file-io xul

我正在试图找出如何让我的XUL应用程序打开HTML文件并将其加载到编辑器元素中。但是,文档很少。

现在,我有一个像这样的内容窗口:

<hbox id="main-frame" flex="1">
    <tabbox id="workspace-tabbox" flex="1">
        <tabs id="workspace-tabs"/>
        <tabpanels id="workspace-tabpanels" flex="1" context="clipmenu"/>
    </tabbox>
    <splitter id="main-frame-splitter"/>
    <iframe id="preview-frame" src="about:blank" flex="1"/>
</hbox>

使用javascript我将<tab>附加到<tabs>,将<tabpanel>附加到<tabpanels>。然后,我创建一个<editor>,将其附加到<tabpanel>,并使其可编辑。

然后,有一个链接到此功能的打开按钮:

function promptFile() {
    var filepicker = Components.classes["@mozilla.org/filepicker;1"].createInstance(Components.interfaces.nsIFilePicker);
    var file;
    var choice;
    var path = null;

    filepicker.init(window, "Open", filepicker.modeOpen);
    filepicker.appendFilters(filepicker.filterHTML);
    choice = filepicker.show();

    if (choice == filepicker.returnOK) {
        file = filepicker.file.QueryInterface(Components.interfaces.nsIFile);
        path = file.path;
    }

    return path;
}

从这里开始,我不知道如何将其加载到<editor>中。我也不确定我是否在正确的路径上获取“路径”,或者我是否需要对“文件”对象执行某些操作。

非常感谢您对此的任何见解或帮助。

1 个答案:

答案 0 :(得分:0)

<editor>本质上是一个框架 - 您只需要将正确的URL加载到该框架中。您可以使用nsIIOService.newFileURInsIFile实例获取该网址:

Components.utils.import("resource://gre/modules/Services.jsm");
var uri = Services.io.newFileURI(file);
var editor = document.getElementById("editor");
var loadFlags = Components.interfaces.nsIWebNavigation.LOAD_FLAGS_NONE;
editor.webNavigation.loadURI(uri.spec, loadFlags, null, null, null);
editor.makeEditable("html", true);

供参考:nsIWebNavigation.loadURI