Опрос
Вы участвуете в программе Windows Insider?
Популярные новости
Обсуждаемые новости

16.05.2010 13:03 | evgeniya.zwezdina

Мы писали много о поддержке, имеющейся в Internet Explorer 9 и призванной дать разработчикам возможность создавать единую разметку и получать идентичные результаты во всех браузерах. IE9 включает две новые функции для разработчиков, желающих создавать единую разметку: DOM Range и HTML5 Text Selection API. Функция DOM Range предоставляет простой и удобный способ для извлечения и управления фрагментом документа. Это также лежит в основе интерфейсов HTML5 Text Selection API, позволяющих использовать один из самых популярных способов взаимодействия пользователя с браузером - выделение текста.

Разработчикам функция HTML5 Selection обеспечивает способ получения и использования программным путем выделенного пользователем текста, как указано в примере кода ниже:

var selection = window.getSelection();
var range = selection.getRangeAt(0);


Как вы могли догадаться по именам, используемым в вышеприведенном фрагменте кода, часть документа, которую вы получаете, определена в терминах DOM Range. Это, по сути, всего лишь способ описания фрагмента документа, позволяющий оперировать с ним так, как вам нужно. Например, если я хочу отредактировать строчный стиль всех элементов в диапазоне:

var contents = range.extractContents();
var childNodes = contents.childNodes;

for (var i = 0; i < childNodes.length; i++)
{
     if (childNodes[i].nodeName != "#text")
        childNodes[i].style.color = "red";

    range.insertNode(childNodes[i].cloneNode(true));
}


В Internet Explorer давно была схожая функциональность, доступная через проприетарные объекты TextRange и HTMLDocument.selection. TextRanges создавались и управлялись через символы, слова и строки. Это были удобные абстракции, но иногда они могли привести к некой двусмысленности и они не упрощали работу с DOM API.

Для того, чтобы увидеть некоторые из преимуществ DOM Range и HTML5 Selection, мы воспользуемся примером, который я создал для сайта IE Test Drive. В примере есть редактор текста, который получает выделенный пользователем текст, извлекает узлы, применяет к нему произвольные операции, а затем повторно вставляет его туда, откуда он был взят. Это позволяет оператору устанавливать строчный стиль для каждого из элементов в выделении, чтобы например, сделать текст зеленым.

Выбор цвета текста является примером возможностей, которые доступны через метод execCommand TextRange, имеющий набор предопределенных операций. Но что насчет операций, которые не определены в методе, как, например, перевод фрагмента текста?

Чтобы увидеть пример в действии, попытайтесь использовать команду ‘Translate’ в примере. Эта команда делает AJAX-вызов к службе Bing Translate, передавая каждый из элементов в выделенном тексте для перевода. Поскольку функция Range работает с диапазоном узлов и смещений, это, безусловно, другая операция; операция получает некоторые узлы, выполняет операцию, а затем помещает их обратно. Такой шаблон позволяет обобщить код для других операций...

Если я попытаюсь проделать ту же самую вещь с TextRange, я не смогу использовать execCommand. Чтобы сделать это, я должен извлечь текстовый контент, передать его на перевод, затем удалить старый текст и повторно вставить новый. В ходе этого процесса все предыдущие операции наподобие изменения текста или размера будут потеряны, поскольку отсутствие информации об узлах не позволяет извлекать индивидуальные фрагменты, редактировать их, а затем вернуть их в оригинальные контейнеры.

Как Дин упомянул в недавней публикации, одной из наших целей в данном релизе является обеспечение возможности создания единой разметки для всех браузеров. В ходе наших исследований мы собрали данные об использовании, которые показали, что функции DOM Range и HTML5 Selection API являются наиболее используемыми в Интернете. Поддержка широко используемых API является важной частью на дороге к единой разметке, поэтому эти API имеют для нас высокий приоритет.

Однако, стоит отметить, если у вас есть приложение, зависящее от старых API, они будут и дальше работать, упростив путь обновления до IE9. Везде, где возможно, мы рекомендуем использовать техники, о которых писал Тони Росс (Tony Ross), чтобы направлять IE9 ту же разметку для Range, что и для других браузеров.

Мы надеемся, что конечным итогом поддержки этих API станут более удобные сценарии для вас, разработчиков. В результате нашей работы количество баллов в тесте ACID3 у IE9 увеличилось. Текущая предварительная версия теперь проходит тесты под номером 7, 9, 12 и 13.

Было забавно работать над этим, и я с нетерпением жду, чтобы увидеть, что с данными функциями смогут сделать другие разработчики.

Джон Сейтел (Jon Seitel),
программный менеджер Internet Explorer


Источник: http://blogs.msdn.com/ieru
Перевод: evgeniya.zwezdina

Комментарии

Комментариев нет...
Для возможности комментировать войдите в 1 клик через

По теме

Акции MSFT
420.55 0.00
Акции торгуются с 17:30 до 00:00 по Москве
Все права принадлежат © ms insider @thevista.ru, 2022
Сайт является источником уникальной информации о семействе операционных систем Windows и других продуктах Microsoft. Перепечатка материалов возможна только с разрешения редакции.
Работает на WMS 2.34 (Страница создана за 0.033 секунд (Общее время SQL: 0.017 секунд - SQL запросов: 51 - Среднее время SQL: 0.00034 секунд))
Top.Mail.Ru