Firefox中的execCommand理由存在问题?

时间:2010-07-14 22:05:26

标签: html firefox3.5

我正在为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,粗体,斜体和下划线都可以正常工作。

有什么想法吗?提前致谢。

2 个答案:

答案 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 *命令后将其删除。