2010-07-14 2 views
3

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

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

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

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

Любые идеи? Заранее спасибо.

ответ

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

Смежные вопросы