проблемы с обоснованием execCommand в Firefox? - PullRequest
3 голосов
/ 15 июля 2010

Я создаю очень простой редактор WYSWIG для div с contenteditable = "true".Я использую execCommand для простого форматирования, такого как полужирный шрифт, курсив и подчеркивание вместе с выравниванием текста.

ПРОБЛЕМА: полужирный, курсив, подчеркивание всей работы, но с использованием justifyCenter (или любое другое оправдание) не работает в Firefox, но работает в Chrome и Safari.Мне кажется, что Chrome и Safari не нравятся мои justifyRight, но они отлично работают с justifyLeft и justifyCenter.В Firefox я получаю следующее:

необработанное исключение: [Exception ... »Компонент возвратил код ошибки: 0x80004005 (NS_ERROR_FAILURE) [nsIDOMNSHTMLDocument.execCommand]« nsresult: «0x80004005 (NS_ERROR_FA)*

Я не могу понять, что не так, но задаюсь вопросом, может ли это быть связано с designMode, который нужно включить в Firefox?Тем не менее, жирный, курсив и подчеркивание работают нормально, без явного включения designMode.

Есть идеи?Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 24 сентября 2011

Ошибка указана здесь: 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 />) и удалении его после выполненияоправдать * команду.

1 голос
/ 24 октября 2010

Я знаю, что это своего рода поздний ответ, и вы, наверное, уже поняли его, но для тех, кто этого не сделал, попробуйте установить contenteditable для true для тела.Я пытаюсь найти способ обойти это, потому что каждый браузер корректно оправдывает текст без него, и я не хочу, чтобы вся страница редактировалась.

...