Пишем простейший WYSIWYG (визуальный редактор) на Javascript. Статьи. wb0.ru - Все для веб-мастера, on-line сервисы

Пишем простейший WYSIWYG (визуальный редактор) на Javascript

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

Что такое WYSIWYG?

WYSIWYG - аббревиатура What You See Is What You Get. В переводе: "что вижу, то и получаю". В висивиге можно просматривать и редактировать HTML-содержимое не редактируя HTML-код. Наиболее близкая аналогия ВИСИВИГу - это текстовый процессор от Microsoft Word, с которым многие знакомы. В нем, чтобы поставить жирность или курсив, не нужно писать теги или другие элементы форматирования, достаточно просто нажать соотствующую функциональную кнопку.

Как это работает?

Для написания простого ВИСИВИГа не нужно изобретать велосипед, все средства уже встроены и успешно работают. Механизм работы большинства визуальных редакторов основан на свойстве designMode объекта document. Это встроенное свойство (к сожалению, далеко не для всех браузеров, но для большинства современных) как раз и позволяет редактировать HTML-контент. После его активанции (designMode='On') на web-страницу можно ставить привычный нам курсор и набивать, удалять или изменять форматирование контента.

Бывает удобно не редактировать всю страницу, а иметь какую-то фиксированную область, для чего используется iframe. Именно его объект document используется для активации свойства designMode.

Форматирование содержимого в пределах ВИСИВИГа осуществляется с помощью непростого метода execCommand, реализация которого сильно различается от браузера к браузеру.

Смотрим JavaScript-код для простейшего ВИСИВИГа:

  1. // ***********************
  2. // ШАГ 1: Выводим iframe и получаем доступ к нему
  3. // ***********************
  4.  
  5. // Выводим в HTML-поток iframe
  6. document.write("<iframe scrolling='no' frameborder='no' src='#' id='frameId' name='frameId'></iframe><br/>");
  7. // Определим Gecko-браузеры, т.к. они отличаются в своей работе от Оперы и IE
  8. var isGecko = navigator.userAgent.toLowerCase().indexOf("gecko") != -1;
  9. // Получаем доступ к объектам window & document для ифрейма
  10. var iframe = (isGecko) ? document.getElementById("frameId") : frames["frameId"];
  11. var iWin = (isGecko) ? iframe.contentWindow : iframe.window;
  12. var iDoc = (isGecko) ? iframe.contentDocument : iframe.document;
  13.  
  14. // ***********************
  15. // ШАГ 2: Добавим на пустую страницу ифрейма произвольный HTML-код
  16. // ***********************
  17.  
  18. // Формируем HTML-код
  19. iHTML = "<html><head>\n";
  20. iHTML += "<style>\n";
  21. iHTML += "body, div, p, td {font-size:12px; font-family:tahoma; margin:0px; padding:0px;}";
  22. iHTML += "body {margin:5px;}";
  23. iHTML += "</style>\n";
  24. iHTML += "<body><u>Содержимое</u> с <b>HTML</b>-<i>разметкой</i></body>";
  25. iHTML += "</html>";
  26. // Добавляем его с помощью методов объекта document
  27. iDoc.open();
  28. iDoc.write(iHTML);
  29. iDoc.close();
  30.  
  31. // ***********************
  32. // ШАГ 3: Инициализация свойства designMode объекта document
  33. // ***********************
  34.  
  35. if (!iDoc.designMode) alert("Визуальный режим редактирования не поддерживается Вашим браузером");
  36. else iDoc.designMode = (isGecko) ? "on" : "On";
  37.  
  38. // ***********************
  39. // ШАГ 4: Простейшие элементы редактирования: жирность, курсив, подчеркивание
  40. // ***********************
  41.  
  42. // Выведем HTML-код этих элементов
  43. document.write("<input type='button' value='Ж' onclick='setBold()' class='bold' />");
  44. document.write("<input type='button' value='К' onclick='setItal()' class='ital' />");
  45. document.write("<input type='button' value='Ч' onclick='setUnder()' class='under' />");
  46. // Запишем код функции, для выставления форматирования
  47. // Используется метод execCommand объекта document
  48. function setBold() {
  49. iWin.focus();
  50. iWin.document.execCommand("bold", null, "");
  51. }
  52. function setItal() {
  53. iWin.focus();
  54. iWin.document.execCommand("italic", null, "");
  55. }
  56. function setUnder() {
  57. iWin.focus();
  58. iWin.document.execCommand("underline", null, "");
  59. }

Замечение. Данная версия визуального редактора не может работать в Опере ниже версии 9.01 и покажет предупреждение "Визуальный режим редактирования не поддерживается Вашим браузером".

Работоспособность проверена в: IE 6, FF 1.5, Opera 9.01 +, Mozilla 1.7.2, NN 7.1 +

Пример работы скрипта:


Дата публикации: 07.07.2010
Александр Бурцев,
fastcoder.org


Комментарии:
  1. qqq: ппппп
    Добавлен: 2021-03-25


   Ваш псевдоним:
Ваш комментарий:

Календарь событий


Новости Интернет


Поиск





Последний пересчет

тИЦ:07 Окт 15
PR:09 Дек 13

Наши партнеры

wservices.ru - регистрация доменов, Whois-сервисы Смайлы на все случаи жизни


 
Copyright © 2006-2024, wb0.ru