- •Как мы сюда попали?
- •Приступим
- •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
- •Поток событий
- •«Убей меня поскорее!», или Отладка как одно из изящных искусств
- •Строим офлайновое приложение
- •Для дальнейшего изучения
- •Веб-формы как форма безумия
- •Приступим
- •Подсказывающий текст
- •Поля с автофокусировкой
- •Адреса электронной почты
- •Веб-адреса
- •Числа как счетчики
- •Числа как ползунки
- •Выборщики даты
- •Формы поиска
- •Выборщики цвета
- •И еще об одной вещи
- •Для дальнейшего изучения
- •Микроданные и другие красивые слова
- •Приступим
- •Что такое микроданные?
- •Структура микроданных
- •Разметка данных о человеке
- •Разметка данных об организации
- •Разметка данных о событии
- •Разметка клиентских отзывов
- •Для дальнейшего изучения
- •Приложение. Универсальный почти алфавитный определитель всего на свете
- •Элементы
- •Для дальнейшего изучения
Форматы видео |
29 |
Спецификация тега <video> такова, что его можно использовать без вспомогательных сценариев. Если указать несколько видеофайлов одного и того же содержания, то браузер с поддержкой HTML5-видео сам выберет, исходя из поддерживаемых форматов, какой из них показать пользователю1.
Браузеры, которые не поддерживают HTML5-видео, совершенно игнорируют теги <video>. Но этот факт можно обратить в свою пользу и заставить браузер воспроизводить видео с помощью стороннего приложения. Такое решение предложил Крок Кэмен (Kroc Camen). Его разработка Video for Everybody! («Видео для каждого», http://camendesign..com/code/video_for_everybody) позволяет опирать-
ся на возможности HTML5-видео там, где они присутствуют, а в более старых браузерах пользоваться QuickTime или Flash. Разработка Кэмена построена не на основе JavaScript и поэтому может обслуживать, в принципе, любой браузер, в том числе мобильный.
Чтобы выполнять с видеоданными кое-какие операции посложнее, чем только вставка на страницу и воспроизведение, надо пользоваться JavaScript. Протестировать поддержку видео можно способом 2 (см. раздел «Способы тестирования браузера» этой главы). Если в браузере поддерживается HTML5-видео, то для DOM-объекта, соответствующего тегу <video>, будет определен метод canPlayType(), а при отсутствии поддержки HTML5-видео набор свойств DOM-объекта будет стандартным. Проверить, работает ли в браузере новая видеофункциональность, вам поможет следующая функция:
function supports_video() {
return !!document.createElement('video').canPlayType;
}
Чтобынеписатьсобственнуюфункцию,прибегнитек помощиModernizr(см.раздел «Modernizr: библиотека для тестирования HTML5-функций» этой главы):
if (Modernizr.video) {
// воспроизведем ролик!
} else {
// встроенной поддержки видео нет,
// надо пользоваться QuickTime или Flash
}
Отдельно нужно определять, какие форматы видео умеет воспроизводить браузер. Об этом — следующий раздел.
Форматы видео
Форматы видеоданных сродни разным языкам. В английской газете может быть написано то же самое, что и в испанской, но если вы умеете читать только поанглийски, то вторая газета будет вам без надобности (во всяком случае для чтения). Так и с видео: чтобы воспроизвести ролик, браузер должен знать «язык» его данных.
1 О различных форматах видео читайте «Элементарное введение в кодировки видеодан-
ных»: часть 1 «Форматы файлов» (http://diveintomark.org/archives/2008/12/18/give- part-1-container-formats) и часть 2 «Видеокодеки, сжимающие с потерями» (http:// diveintomark.org/archives/2008/12/19/give-part-2-lossy-video-codecs). — Примеч. авт.
30 |
Глава 2.. Тестирование функций HTML5 в браузере |
«Языки» видеоформатов называются кодеками. Кодек — это алгоритм, в соответствии с которым последовательность графических образов кодируется последовательностью бит. Сейчас в мире несколько десятков широко используемых кодеков. Какой же выбрать? Суровая реальность HTML5 такова, что разработчики браузеров не сумели договориться о едином общепринятом видеокодеке. Впрочем, количество альтернатив немногим больше: две. Один из этих кодеков платный (лицензионный сбор), но работает в Safari и на iPhone (а также в Adobe Flash, если пользоваться разработками типа «Видео для каждого»). Другой — бесплатный, он работает в браузерах с открытым исходным кодом, таких как Chromium и Mozilla Firefox.
Протестировать поддержку разных форматов видео можно способом 3 (см. раздел «Способы тестирования браузера» этой главы). Если в браузере поддерживается HTML5-видео,тодляDOM-объекта,соответствующеготегу<video>,будетопределен метод canPlayType(), который и сообщит, с какими форматами видео может работать браузер.
Рассмотрим функцию, проверяющую браузер на умение читать патентованный формат Macintosh и iPhone:
function supports_h264_baseline_video() { if (!supports_video()) { return false; } var v = document.createElement("video");
return v.canPlayType('video/mp4; codecs="avc1.42E01E, mp4a.40.2"');
}
Впервойстрокеэтогокодаспомощьюсозданнойранеефункцииsupports_video() мы проверяем, есть ли в браузере поддержка HTML5-видео:
if (!supports_video()) { return false; }
Если браузер не поддерживает HTML5-видео, то и разные форматы он, конечно, не будет читать.
Теперь создадим пустой тег <video> (но не будем присоединять его к странице, чтобы он не был виден) и вызовем метод canPlayType(). Этот метод наверняка будет доступен, ведь в его существовании только что удостоверилась функция supports_ video().
var v = document.createElement("video");
return v.canPlayType(‘video/mp4; codecs=”avc1.42E01E, mp4a.40.2”’);
Формат видеоданных — это, вообще говоря, сочетание нескольких компонентов. Если говорить технически, показанный выше код спрашивает у браузера, может ли тот воспроизводить видео H.264 базового профиля и звук AAC профиля низкой сложности в контейнере MPEG-41.
Функция canPlayType() не возвращает булевы значения true и false. Зная, что некоторые видеоформаты очень сложны, функция отвечает одним из трех значений:
1Что все это значит, я объясню в главе 5. Возможно, вам не помешает также ознакомиться с «Элементарным введением в кодировки видеоданных» (http://diveintomark.org/ tag/give). — Примеч. авт.
Локальное хранилище |
31 |
"probably" — браузер уверен, что может проигрывать видео данного формата;"maybe" — браузер считает, что, возможно, сумел бы воспроизвести видео дан-
ного формата;
"" (пустая строка) — браузер полагает, что наверняка не может воспроизвести такое видео.
Для проверки браузера на умение читать открытый формат, используемый в Mozilla Firefox и иных браузерах с открытым кодом, есть другая функция. Она сконструирована точно так же. Разница лишь в том, что функции canPlayType() передается не такая строка, как в примере выше. На этот раз мы спрашиваем у браузера, может ли тот воспроизводить видео формата Theora и аудио формата Vorbis в Ogg-контейнере:
function supports_ogg_theora_video() {
if (!supports_video()) { return false; } var v = document.createElement("video");
return v.canPlayType(‘video/ogg; codecs=”theora, vorbis”’);
}
Есть еще третья альтернатива — WebM (http://www..webmproject..org), не защищенный патентом видеокодек, код которого недавно был открыт. Его намереваются включить в последующие версии популярных браузеров, в частности Chrome, Firefox и Opera. Тестирование поддержки WebM-видео проводится по той же схеме:
function supports_webm_video() {
if (!supports_video()) { return false; } var v = document.createElement("video");
return v.canPlayType(‘video/webm; codecs=”vp8, vorbis”’);
}
Чтобынеписатьсобственнуюфункцию,можетеприбегнутьк помощиModernizr (но имейте в виду, что тестировать поддержку открытого видеоформата WebM эта библиотека пока не умеет):
if (Modernizr.video) {
// воспроизведем ролик, но вот в каком формате? if (Modernizr.video.ogg) {
//попробуем Ogg Theora + Vorbis в Ogg-контейнере
}else if (Modernizr.video.h264){
//попробуем видео H.264 + аудио AAC в MP4-контейнере
}
Локальное хранилище
ЛокальноехранилищеHTML5(http://dev..w3..org/html5/webstorage/)даетспособхранить часть сайтовых данных в памяти вашего компьютера, чтобы потом было удобнее их загружать. На схожей идее основана система cookies, но мы говорим о значительных
32 |
Глава 2.. Тестирование функций HTML5 в браузере |
объемахинформации.Cookiesимеютограниченныйразмер,икаждыйразпризагрузке очередной страницы ваш браузер отсылает их веб-серверу, а это лишний расход времени и трафика. Локальное хранилище HTML5 устроено так, что при загрузке сайтовойстраницынедостающиеданныемогутбытьполученыизпамятивашегокомпьютера с помощью JavaScript.
Разметка в вопросах и ответах
Вопрос: Локальное хранилище — это действительно |
раздел в основной спецификации HTML5, но потом |
часть HTML5? И почему ему посвящена особая спец- |
некоторые участники рабочей группы HTML5 пожа- |
ификация? |
ловались на чрезмерно возросший объем стандарта, |
Ответ: Если кратко, то да: локальное хранилище — |
и спецификацию хранилища выделили в особый до- |
кумент. Поступать так, конечно, ничуть не разумнее, |
|
часть HTML5. Чуть более подробный ответ таков: |
чем разрезать торт на кусочки, чтобы уменьшить |
исторически локальному хранилищу был посвящен |
общее количество калорий в нем. |
|
|
Протестировать поддержку локального хранилища HTML5 можно способом 1 (см. раздел «Способы тестирования браузера» этой главы). Если HTML5хранилище поддерживается браузером, то для глобального объекта window будет определено свойство localStorage. Соответственно, если поддержки хранилища в браузере нет, то свойство тоже не будет определено. Проверить поможет такая функция:
function supports_local_storage() {
return (‘localStorage’ in window) && window[‘localStorage’] !== null;
}
Чтобы не писать собственную функцию, прибегните к помощи Modernizr: if (Modernizr.localstorage) {
//хранилище доступно!
}else {
//встроенной поддержки хранилища нет,
//стоит попробовать Gears или иное стороннее решение
Помните, что JavaScript чувствителен к регистру. Атрибут объекта Modernizr называетсяlocalstorage (всебуквыстрочные),аDOM-свойство—window.localStorage (буква S прописная).
Разметка в вопросах и ответах
Вопрос: Насколько хорошо защищены данные моего |
зический доступ к вашему компьютеру. Через браузер |
локального хранилища HTML5? Может ли кто-нибудь |
к локальному хранилищу могут обращаться все сайты, |
их читать? |
но каждому из них разрешено читать и видоизменять |
Ответ: Читать данные вашего локального хранилища |
только «свои» данные, а не информацию, сохранен- |
ную другими сайтами. Это так называемое «ограниче- |
|
и даже видоизменять их могут все лица, имеющие фи- |
ние по источнику» (http://bit.ly/9YyPpj). |
|
|