- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 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>
关于javascript - 无法通过 <editor> 元素启用 XUL 中的 Midas(Gecko 富文本编辑器),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6666341/
最近我发现a problem on the midas我修复了它,现在的问题是我想使用 MidasLib 而不是 midas.dll 并且使用源代码我只能构建 DLL。 源代码是 C++,我对它知之甚
当我在另一台没有使用 Delphi 的计算机上尝试我的应用程序时遇到问题。 如果我将 midas.dll 放在 System32 上的同一文件夹/目录中,我总是会收到错误消息 加载 midas.dll
当我在另一台没有使用 Delphi 的计算机上尝试我的应用程序时遇到问题。 如果我将 midas.dll 放在 System32 上的同一文件夹/目录中,我总是会收到错误消息 加载 midas.dll
我调查了我的 Delphi 应用程序中的一个奇怪的错误,并怀疑问题可能出在 Midas.dll 中。我需要源代码来审查。它是打开?在哪里可以找到它? 我安装了 XE7 和 Delphi 10 Seat
正如标题所说,在使用 themida 保护我的应用程序后反序列化失败,但出现以下异常: Unable to generate a temporary class (result=1). error C
根据博士。鲍勃,这是可以做到的。有人可以提供分步示例或教程吗? 最佳答案 您没有嵌入MIDAS.DLL;您将 MidasLib 添加到项目的 USES 子句中。这会将基本功能嵌入到您的程序中,而无需依
我正在尝试使用带有 midasr 的月度变量生成季度变量的提前 1 步预测。包裹。我遇到的麻烦是我只能估计一个MIDAS当样本中每月观察的数量正好是季度观察数量的 3 倍时模型。 我如何在 midas
考虑以下因素:我们在 64 位 Windows Server 上安装了 32 位 Datasnap 服务器 在embarcadero\rad studio\11.00\redist中有2个文件夹:32
如何在 Delphi 2006 的 Midas/DataSnap 项目中设置 DUnit 测试 编辑 如何将 Dunit 测试设置到 TRemoteDataModule 中Delphi 2006 中的
我必须保护我的程序,它是用 .NET 编写的。我决定使用 themida 保护器来虚拟化一个小的 dll(用 C 编写),它将被加载到主程序中(通过 PInvoke)以激活它。 出于某些特定原因,我需
我正在努力做到这一点,这样我就可以将一个使用 Midas.dll 的 firemonkey 项目部署到另一台机器上,而不必也将 DLL 复制过来。 This article通过在您的 uses 子句中
这是这两篇文章的后续问题。 How to deal with impossible dates for midasr package https://stats.stackexchange.com/q
我正在尝试使用 Midas通过 element XUL 遵循 this article 的说明.到目前为止,我有以下代码: 但是,当我单击“粗体”
我是一名优秀的程序员,十分优秀!