Сообщение от 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');">