Показать сообщение отдельно
  #3 (permalink)  
Старый 21.09.2009, 12:19
Аватар для mcfly
Интересующийся
Отправить личное сообщение для mcfly Посмотреть профиль Найти все сообщения от mcfly
 
Регистрация: 21.09.2009
Сообщений: 26

Сообщение от B~Vladi Посмотреть сообщение
Насколько я понял, форматированный текст вставляецо только в ИЕ...
Работа с буфером не желательна, ибо это поддерживает только ИЕ. Надо сделать функционал максимально удобный для пользователя + чтобы работало в пятерке распространенных браузеров.

Мне вот сейчас какой алгоритм пришел в голову:
1. Пользователь вставляет текст
2. Срабатывает событие onbeforepaste
3. Обработчик на этом событии открывает див с текстареа и ставит туда курсор (в данном случае возможно, что текст туда вставиться?)
4. Если текст туда не вставиться автоматом, то в этом окне указать, что нужно тут вставить текст и нажать на ОК
5. ПРи нажатии на ОК скрипт вставляет этот текст в позицию курсора в висивиге

Это оптимальный алгоритм, если не получится в браузерах, кроме ИЕ, автоматом очистить текст и сразу вставить в висивиг

Вот и возникает главный вопрос: Куда указывать обработчик этого события.

Дополнительная инфа:

Поле висивига находится во фрейме: <iframe id='frm' class='editor_iframe'></iframe>

Инициализация висивига:
var NewTextArea={
  frame:{},
  document:{},
  window:{},
  init:function(frame){
    NewTextArea.frame=frames[frame]?frames[frame]:document.getElementById(frame);//IE, Opera - frames.document, другие - ById.document

    if (!NewTextArea.frame){
      //alert("Ошибка ID");
      return -1;
    }

    //1) получить указатель
    NewTextArea.document=NewTextArea.frame.contentDocument || NewTextArea.frame.document;
    if (!NewTextArea.document){
      //alert("Ошибка iframe");
      return -2;
    }

    NewTextArea.window=NewTextArea.frame.contentWindow || NewTextArea.frame.window;
    if (!NewTextArea.window){
      //alert("window");
      return -2;
    }

    //2) Оформить iframe HTML документ
    var HTML = "<html><head></head>";
    HTML += "<body></body></html>"

    NewTextArea.document.open();
    NewTextArea.document.write(HTML);
    NewTextArea.document.close();

    //3) Установить designMode
    if (NewTextArea.document.designMode){
      NewTextArea.document.designMode='on';
    }else{
      alert("Ошибка designMode");
      return -3;
    }
  }
}


Обязательно прописать в боди: <BODY onload="NewTextArea.init('frm');">

Последний раз редактировалось mcfly, 21.09.2009 в 16:46.
Ответить с цитированием