- •Как мы сюда попали?
- •Приступим
- •MIME-типы
- •Большое отступление о том, как появляются стандарты
- •Не отрывая карандаша
- •Все, что вы знаете об XHTML, — это ложь
- •Альтернативная точка зрения
- •WHAT? Что?!
- •И снова о W3C
- •Послесловие
- •Для дальнейшего изучения
- •Тестирование функций HTML5 в браузере
- •Приступим
- •Способы тестирования браузера
- •Modernizr: библиотека для тестирования HTML5-функций
- •Холст
- •Рисование текста
- •Видео
- •Форматы видео
- •Локальное хранилище
- •Фоновые вычисления
- •Офлайновые веб-приложения
- •Геолокация
- •Типы полей ввода
- •Подсказывающий текст
- •Автофокусировка в формах
- •Микроданные
- •Для дальнейшего изучения
- •Что все это значит?
- •Приступим
- •Определение типа документа
- •Корневой элемент
- •Элемент HEAD
- •Кодировка символов
- •Ссылочные отношения
- •Новые семантические элементы HTML5
- •Большое отступление о том, как браузеры обрабатывают незнакомые элементы
- •Верхние колонтитулы
- •Рубрикация
- •Дата и время
- •Навигация
- •Нижние колонтитулы
- •Для дальнейшего изучения
- •С чистого листа (холста)
- •Приступим
- •Простые фигуры
- •Координатная сетка холста
- •Контуры
- •Текст
- •Градиенты
- •Изображения
- •Живой пример
- •Для дальнейшего изучения
- •Видео в Сети
- •Приступим
- •Видеоконтейнеры
- •Видеокодеки
- •Theora
- •Аудиокодеки
- •MPEG-1 Audio Layer 3
- •Advanced Audio Coding
- •Vorbis
- •Что работает в Интернете?
- •Проблемы лицензирования видео H.264
- •Кодирование Ogg-видео с помощью Firefogg
- •Пакетное кодирование Ogg-видео с помощью ffmpeg2theora
- •Кодирование H.264-видео с помощью HandBrake
- •Пакетное кодирование H.264-видео с помощью HandBrake
- •Кодирование WebM-видео с помощью программы ffmpeg
- •…И наконец разметка
- •Живой пример
- •Для дальнейшего изучения
- •Вот мы вас и нашли!
- •Приступим
- •API геолокации
- •Покажите мне код
- •Обработка ошибок
- •Требую выбора!
- •На помощь спешит geo.js
- •Живой пример
- •Для дальнейшего изучения
- •Локальное хранилище: прошлое, настоящее, будущее
- •Приступим
- •Краткая история прототипов локального хранилища до HTML5
- •HTML5-хранилище: вводный курс
- •Использование HTML5-хранилища
- •Следим за состоянием HTML5-хранилища
- •Ограничения в современных браузерах
- •HTML5-хранилище в действии
- •Альтернативы: хранилище без ключей и значений
- •Для дальнейшего изучения
- •На волю, в офлайн!
- •Приступим
- •Манифест кэша
- •Раздел NETWORK
- •Раздел FALLBACK
- •Поток событий
- •«Убей меня поскорее!», или Отладка как одно из изящных искусств
- •Строим офлайновое приложение
- •Для дальнейшего изучения
- •Веб-формы как форма безумия
- •Приступим
- •Подсказывающий текст
- •Поля с автофокусировкой
- •Адреса электронной почты
- •Веб-адреса
- •Числа как счетчики
- •Числа как ползунки
- •Выборщики даты
- •Формы поиска
- •Выборщики цвета
- •И еще об одной вещи
- •Для дальнейшего изучения
- •Микроданные и другие красивые слова
- •Приступим
- •Что такое микроданные?
- •Структура микроданных
- •Разметка данных о человеке
- •Разметка данных об организации
- •Разметка данных о событии
- •Разметка клиентских отзывов
- •Для дальнейшего изучения
- •Приложение. Универсальный почти алфавитный определитель всего на свете
- •Элементы
- •Для дальнейшего изучения
Офлайновые веб-приложения |
33 |
Фоновые вычисления
Фоновые вычисления (http://bit..ly/9jheof) — введенный в HTML5 стандартный способ запуска JavaScript в браузере в фоновом режиме. Механизм фоновых вычислений позволяет иметь несколько «процессов», процедуры которых выполняются более или менее одновременно (чтобы понять, как это происходит, подумайте об одновременной работе большого количества приложений в вашем компьютере). Эти фоновые «потоки» могут выполнять сложные математические расчеты, запрашивать о чем-либо сеть или локальное хранилище, в то время как отображаемая в браузере страница будет реагировать на действия пользователя: щелчки кнопкой мыши, прокрутку, клавиатурный ввод.
Протестировать поддержку фоновых вычислений можно способом 1 (см. раздел «Способы тестирования браузера» этой главы). Если в вашем браузере поддерживается соответствующий интерфейс (Web Worker API), то для глобального объекта window будет определено свойство Worker. Соответственно, если поддержки API фоновых вычислений в браузере нет, то свойство тоже не будет определено. Проверить поможет такая функция:
function supports_web_workers() { return !!window.Worker;
}
Чтобынеписатьсобственнуюфункцию,прибегнитек помощиModernizr(см.раздел «Modernizr: библиотека для тестирования HTML5-функций» этой главы):
if (Modernizr.webworkers) {
//фоновые вычисления доступны!
}else {
//встроенной поддержки фоновых вычислений нет,
//стоит попробовать Gears или иное стороннее решение
Помните, что JavaScript чувствителен к регистру. Атрибут объекта Modernizr называется webworkers (все буквы строчные), а DOM-объект — window.Worker (буква W прописная).
Офлайновые веб-приложения
Читать статические веб-страницы, отключившись от Сети, очень просто: достаточно зайти в Интернет, загрузить страницу, потом выйти из Интернета, уехать с ноутбуком к себе на дачу и там в тишине наслаждаться чтением. (Шутка. На дачу можно не ехать.) С офлайновым режимом у таких веб-приложений, как Gmail и Google Docs, дело обстояло сложнее. Но теперь благодаря возможностям HTML5 создать веб-приложение, работающее в режиме офлайн, может каждый из нас, а не только компания Google.
Такое приложение берет начало в онлайне. При первом посещении сайта, который может отображаться локально, веб-сервер сообщит вашему браузеру, какие
34 |
Глава 2.. Тестирование функций HTML5 в браузере |
файлы надо загрузить, чтобы сайт работал без подключения к Сети. Это могут быть абсолютнолюбыефайлы:HTML,JavaScript,картинкии дажевидеоролики(см. раздел «Видео» этой главы). После того как браузер загрузит все необходимые файлы, вы сможете открывать тот же сайт, отключившись от Интернета: браузер, видя, что сетевое подключение недоступно, будет пользоваться предварительно загруженными файлами. Перейдя в режим онлайн, вы сумеете передать на сервер измененные вами данные.
Протестироватьподдержкуофлайновыхприложенийможноспособом1(см. раздел «Способы тестирования браузера» этой главы). Если ваш браузер поддерживает их, то для глобального объекта window будет определено свойство applica tionCache. Соответственно, если поддержки офлайновых приложений в браузере нет, то свойство тоже не будет определено. Проверить это поможет такая функция:
function supports_offline() { return !!window.applicationCache;
}
Чтобы не писать собственную функцию, прибегните к помощи Modernizr: if (Modernizr.applicationcache) {
//офлайновые приложения доступны!
}else {
//встроенной поддержки офлайновых приложений нет,
//стоит попробовать Gears или иное стороннее решение
Помните, что JavaScript чувствителен к регистру. Атрибут объекта Modernizr называется applicationcache (все буквы строчные), а DOM-объект — window. applicationCache (буква C прописная).
Геолокация
Геолокация — это вид деятельности, позволяющий определять координаты своего местонахождениявмиреиприжеланииделитьсяимисдрузьями.Координатыможно определить несколькими способами: по IP-адресу, через подключение к беспроводномуИнтернету,черезретрансляторсотовойсети,насвязис которымнаходится ваш телефон, или с помощью особого GPS-аппарата, принимающего спутниковые данные о широте и долготе.
Разметка в вопросах и ответах
Вопрос: Разве геолокация — это часть HTML5? Почему |
стандарт геолокации определяет самостоятельная рабо- |
о ней идет речь в этой книге? |
чая группа (http://www.w3.org/2008/geolocation/), никак |
Ответ: Разработчики браузеров работают над поддерж- |
не связанная с рабочей группой HTML5. Но на страницах |
нашей книги упоминание о геолокации неизбежно: это |
|
койгеолокациибуквальновэтисамыедни.Строгоговоря, |
один из векторов развития современного Интернета. |
|
|
Типы полей ввода |
35 |
Протестировать поддержку геолокации можно способом 1 (см. раздел «Способы тестирования браузера» этой главы). Если ваш браузер поддерживает API геолокации, то для глобального объекта navigator будет определено свойство geolocation. Соответственно, если поддержки геолокации в браузере нет, то свойство тоже не будет определено. Проверить поможет следующая функция:
function supports_geolocation() { return !!navigator.geolocation;
}
Чтобынеписатьсобственнуюфункцию,прибегнитек помощиModernizr(см.раздел «Modernizr: библиотека для тестирования HTML5-функций» данной главы):
if (Modernizr.geolocation) {
//определим ваши координаты!
}else {
//встроенной поддержки геолокации нет,
//стоит попробовать Gears или иное стороннее решение
Если «родная» поддержка API геолокации в вашем браузере отсутствует, не надо отчаиваться. Gears (http://tools..google..com/gears/) — разработанное Google
браузерное расширение с открытым исходным кодом, функционирующее на плат-
формах Windows, Mac, Linux, Windows Mobile и Android, — эмулирует в старых браузерах отдельные новые функции, о которых рассказано в этой главе. В частности, Gears предлагает API геолокации. Этот интерфейс отличается от стандартного navigator.geolocation, но служит тем же целям.
Собственные API геолокации есть также на некоторых мобильных платформах, в том числе BlackBerry, Nokia, Palm и OMTP BONDI. Как пользоваться всеми этими столь несхожими прикладными интерфейсами, будет подробно рассказано в главе 6.
Типы полей ввода
Вы знаете о веб-формах все, не так ли? Действительно, чего там сложного: создать контейнер <form>, добавить несколько полей <input type="text">, возможно, одно <input type="password"> и увенчать конструкцию великолепной кнопкой <input type="submit">.
Увы, это лишь незначительная часть всех современных функций. В HTML5 появилось больше десятка новых типов полей ввода, которые теперь можно использовать в формах.
<input type="search"> — поисковая форма (http://bit..ly/9mQt5C).<input type="number"> — форма выбора числа (http://bit..ly/aPZHjD).<input type="range"> — ползунок (http://bit..ly/dmLiRr).
<input type="color"> — форма выбора цвета (http://bit..ly/bwRcMO).<input type="tel"> — телефонный номер (http://bit..ly/amkWLq).<input type="url"> — интернет-адрес (http://bit..ly/cjKb3a).
36 |
Глава 2.. Тестирование функций HTML5 в браузере |
|
<input type="email"> — адрес электронной почты (http://bit..ly/aaDrgS). |
|
<input type="date"> — форма выбора даты (http://bit..ly/c8hL58). |
|
<input type="month"> — месяц (http://bit..ly/cDgHRI). |
|
<input type="week"> — неделя (http://bit..ly/bR3r58). |
|
<input type="time"> — метка времени (http://bit..ly/bfMCMn). |
|
<input type="datetime"> — точные дата и время в абсолютном исчислении (http:// |
|
bit..ly/c46zVW). |
|
<input type="datetime-local"> — местные дата и время (http://bit..ly/aziNkE). |
|
Протестировать поддержку новых типов полей ввода можно способом 4 (см. раз- |
дел «Способы тестирования браузера» этой главы). Сначала создадим в памяти пустой тег <input>:
var i = document.createElement("input");
По умолчанию каждое поле ввода имеет тип "text"; впоследствии это окажется очень важным.
Теперь присвоим атрибуту type пустого тега <input> значение, соответствующее типу, поддержку которого мы тестируем, например:
i.setAttribute("type", "color");
Если ваш браузер умеет работать с данным типом полей ввода, то в атрибуте type будет и далее сохраняться установленное вами значение. Если нет, то новое значение будет проигнорировано и при запросе система возвратит "text":
return i.type !== "text";
Чтобы не писать самостоятельно 13 разных функций, которые бы тестировали поддержку HTML5-типов полей ввода, можно, как и в остальных случаях, воспользоваться Modernizr. В целях эффективности при тестировании всех 13 новых типов Modernizr обходится всего одним тегом <input>. На выходе получаем хеш Modernizr.inputtypes с 13 ключами (HTML5-типы полей ввода) и 13 булевыми значениями (есть поддержка — true, нет поддержки — false):
if (!Modernizr.inputtypes.date) {
//встроенной поддержки <input type="date"> нет,
//можно попробовать решить проблему с помощью Dojo или jQueryUI
}
Подсказывающий текст
Кроме новых типов полей ввода, HTML5 предусматривает несколько мелких дополнений к существующей системе веб-форм. Одно из них предполагает возможность назначать для всех полей ввода «подсказывающий» текст, который отображается внутри поля до тех пор, пока оно пусто и не несет фокуса. Как только пользователь щелкнет на нем или перейдет к нему с помощью табулятора, подсказывающий текст исчезнет. Если по этому описанию вам трудно представить, о чем идет речь, см. рис. 9.1.