【问题标题】:How to load HTML file into <editor>如何将 HTML 文件加载到 <editor>
【发布时间】:2012-07-15 20:24:03
【问题描述】:

我试图弄清楚如何让我的 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,我将&lt;tab&gt; 附加到&lt;tabs&gt;,并将&lt;tabpanel&gt; 附加到&lt;tabpanels&gt;。然后我创建一个&lt;editor&gt;,将其附加到&lt;tabpanel&gt;,并使其可编辑。

然后,有一个打开按钮链接到这个函数:

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

从这里开始,我不知道如何将其加载到&lt;editor&gt;。我也不确定我是否在正确的路径上获取“路径”,或者我是否需要对“文件”对象做一些事情。

对此的任何见解或帮助将不胜感激。

【问题讨论】:

  • 请不要重复问题标题中的标签。

标签: javascript file-io xul


【解决方案1】:

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

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

【讨论】:

  • 感谢您的回复。这很好用,除了一件事 - 它将 html 文件加载为呈现的 HTML 页面。也许我没有正确说出我原来的问题,但我想要的是将源代码(html标签)加载到编辑器中。我尝试将 URI 作为“src”属性直接加载到编辑器中,但它生成了一条错误消息(“找不到文件 chrome://app/content/[xpconnect 包装的 nsIURI]”)。
  • 另外,我还尝试将路径(“file.path”)作为“src”属性直接加载到编辑器中。这产生了不同的错误消息(“c 不是注册协议”)。
  • @AndrewHuth:&lt;editor&gt; 是一个所见即所得的编辑器,如果你想编辑源代码是错误的选择。您可能需要source-editor.jsm(使用setMode(SourceEditor.MODES.HTML)setText() 以及从文件中获取的文本)。
猜你喜欢
  • 1970-01-01
  • 2017-04-23
  • 2015-12-24
  • 2011-06-06
  • 2011-10-27
  • 2016-10-08
  • 2011-03-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多