我正在为contenteditable = "true"
的div构建一个非常简单的WYSWIG编辑器。我使用execCommand
进行简单格式化,例如粗体,斜体和下划线以及文本对齐。
问题:粗体,斜体,强调所有工作,但使用justifyCenter
(或任何理由)在Firefox中不起作用,但适用于Chrome和Safari。 Chrome和Safari似乎不喜欢我的理由,但是使用justifyLeft和justifyCenter可以正常工作。在Firefox中我得到以下内容:
未捕获的异常:[Exception ...“组件返回失败代码: 0x80004005(NS_ERROR_FAILURE)[nsIDOMNSHTMLDocument.execCommand]“ nsresult:“0x80004005(NS_ERROR_FAILURE)”
我无法弄清楚出了什么问题,但是想知道是否可能与需要在Firefox中设置的designMode有关?但是,如果没有明确启用designMode,粗体,斜体和下划线都可以正常工作。
有什么想法吗?提前致谢。
答案 0 :(得分:1)
我知道这是一个迟到的答案,你可能已经把它想出来了,但是对于那些没有做过的人来说,试着为身体设置满足感。我正试图找到一种解决方法,因为每个浏览器都可以在没有它的情况下证明文本正常,而且我不希望整个页面可以编辑。
答案 1 :(得分:1)
此处引用了该错误:https://bugzilla.mozilla.org/show_bug.cgi?id=442186 有人提出了这个解决方法:
try
{
document.execCommand('justifyright', false, null);
}
catch (e)
{
//special case for Mozilla Bug #442186
if(e && e.result == 2147500037)
{
//probably firefox bug 442186 - workaround
var range = window.getSelection().getRangeAt(0);
var dummy = document.createElement('br');
//find node with contentEditable
var ceNode = range.startContainer.parentNode;
while(ceNode && ceNode.contentEditable != 'true')
ceNode = ceNode.parentNode;
if(!ceNode)
throw 'Selected node is not editable!';
ceNode.insertBefore(dummy, ceNode.childNodes[0]);
document.execCommand('justifyright', false, null);
dummy.parentNode.removeChild(dummy);
}
else if(console && console.log)
console.log(e);
}
它包括创建一个虚拟元素(<br />
)并在执行justify *命令后将其删除。