gpt4 book ai didi

javascript - 无法通过 元素启用 XUL 中的 Midas(Gecko 富文本编辑器)

转载 作者:行者123 更新时间:2023-11-30 13:31:19 25 4
gpt4 key购买 nike

我正在尝试使用 Midas通过 element XUL 遵循 this article 的说明.到目前为止,我有以下代码:

<window id="main" title="Anunciador Blog Editor" width="300" height="300"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
xmlns:xhtml="http://www.w3.org/1999/xhtml">
<script type="application/x-javascript">
<![CDATA[
var editor = null;
function onLoad() {
editor = document.getElementById('editor');
editor.contentDocument.designMode = 'on';
}

function onBoldButtonCommand() {
editor.contentDocument.execCommand('bold', false, null);
}

window.addEventListener("load", onLoad, false);
]]>
</script>
<button label="Bold" oncommand="onBoldButtonCommand();" />
<editor id="editor" type="content-primary" editortype="html" src="about:blank" flex="1" />
</window>

但是,当我单击“粗体”按钮并在 <editor> 中选择了一些文本时,文本没有改变,JS 控制台显示以下错误:

Error: uncaught exception: [Exception... "Component returned failure code: 0x80004005
(NS_ERROR_FAILURE) [nsIDOMNSHTMLDocument.execCommand]" nsresult: "0x80004005
(NS_ERROR_FAILURE)" location: "JS frame :: chrome://anunciador/content/main.xul ::
onBoldButtonCommand :: line 14" data: no]

这对我来说没有意义,因为我已经启用了编辑模式:

editor.contentDocument.designMode = 'on';

此外,如果我只更改行

<editor id="editor" type="content-primary" editortype="html" src="about:blank" flex="1" />

<xhtml:iframe id="editor" src="about:blank"></xhtml:iframe>

我可以在 iframe 中编辑和格式化文本(但我真的更喜欢使用编辑器)。

我是不是忘记了什么?

最佳答案

经过长时间的研究,问题似乎是bug in Gecko - 一个经常性的,顺便说一句。显然,终于 solved. .

当我们等待公共(public)构建时(或者如果您不能使用 XULRunner 或 Firefox 的 future 更新版本),您可以使用 commandManager property编辑器的解决方法。该对象提供了一个名为 doCommand() 的方法,可用于格式化文本。这个方法有三个参数:一个代表命令的字符串(它不同于execCommand()接受的那个),一个param对象(获取起来非常麻烦,但可以暂时忽略)和编辑器的 contentWindow

如果你想要,例如要使选择变粗,只需按以下方式使用此方法:

function onBoldButtonCommand() {
editor.commandManager.doCommand("cmd_bold", {}, editor.contentWindow)
}

但是,如果您的命令需要参数,它可能会变得有点复杂。首先,您需要一个 nsICommandParams interface 的实例(这将是一个由 JavaScript 对象包装的 C++ 对象)。获取这个对象涉及一些非常深奥的代码,显然涉及诸如 XPCOM 之类的东西:

var commandParams = Components.classes['@mozilla.org/embedcomp/command-params;1'].getService(Components.interfaces.nsICommandParams);

在这个对象中,我们将命令的参数设置为键值对。 There我们有一个所有命令都接受的参数列表。不要害怕此页面引用 C++ 代码这一事实 - 您可以直观地将其映射到 JavaScript。此外,希望它似乎所有命令只接收一个参数,“state_attribute”。如果我们想设置 color of a text ,比如我们在param对象中这样设置参数:

commandParams.setCStringValue("state_attribute", "#FF0000");

然后您这次使用参数“只是”调用 doCommand():

editor.commandManager.doCommand("cmd_fontColor", commandParams, editor.contentWindow);

下面的代码是一个使用 doCommand() 的工作示例,包括和不带参数:

<window id="main" title="Anunciador Blog Editor" width="300" height="300"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
xmlns:xhtml="http://www.w3.org/1999/xhtml">
<script type="application/x-javascript">
<![CDATA[
var editor = null;
function onLoad() {
editor = document.getElementById('editor');
editor.contentDocument.designMode = 'on';
}

function onBoldButtonCommand() {
editor.commandManager.doCommand("cmd_bold", {}, editor.contentWindow)
}

function onRedTextCommand() {
var commandParams = Components.classes['@mozilla.org/embedcomp/command-params;1'].getService(Components.interfaces.nsICommandParams);
commandParams.setCStringValue("state_attribute", "#FF0000");
editor.commandManager.doCommand("cmd_fontColor", commandParams, editor.contentWindow)
}

window.addEventListener("load", onLoad, false);
]]>
</script>
<toolbar>
<button label="Bold" oncommand="onBoldButtonCommand();" />
<button label="Red" oncommand="onRedTextCommand();" />
</toolbar>
<editor id="editor" type="content-primary" editortype="html" src="about:blank" flex="1" />
</window>

此外,这 page会有所帮助并且this one更有帮助(虽然部分是用法语写的!)。

关于javascript - 无法通过 <editor> 元素启用 XUL 中的 Midas(Gecko 富文本编辑器),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6666341/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com