3

我正在为 div 构建一个非常简单的 WYSWIG 编辑器contenteditable = "true"。我习惯于进行execCommand简单的格式设置,例如粗体、斜体和下划线以及文本对齐。

问题:粗体、斜体、下划线所有工作,但使用justifyCenter(或任何理由)在 Firefox 中不起作用,但在 Chrome 和 Safari 中起作用。Chrome 和 Safari 似乎不喜欢我的 justifyRight,但与 justifyLeft 和 justifyCenter 配合得很好。在 Firefox 中,我得到以下信息:

未捕获的异常:[异常...“组件返回失败代码:0x80004005 (NS_ERROR_FAILURE) [nsIDOMNSHTMLDocument.execCommand]”nsresult:“0x80004005 (NS_ERROR_FAILURE)”

我不知道出了什么问题,但想知道它是否与需要在 Firefox 中设置为 on 的 designMode 有关?但是,如果我没有明确打开 designMode,粗体、斜体和下划线就可以正常工作。

有任何想法吗?提前致谢。

4

2 回答 2

1

我知道这是一个迟到的答案,你可能已经想通了,但对于任何没有的人,请尝试将 contenteditable 设置为 true 。我试图找到解决这个问题的方法,因为每个浏览器都可以在没有它的情况下很好地证明文本,而且我不希望整个页面都可编辑。

于 2010-10-24T04:30:58.253 回答
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);
}

它包括创建一个虚拟元素 (a <br />) 并在执行 justify* 命令后将其删除。

于 2011-09-23T21:05:05.617 回答