- •Как мы сюда попали?
- •Приступим
- •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
- •Поток событий
- •«Убей меня поскорее!», или Отладка как одно из изящных искусств
- •Строим офлайновое приложение
- •Для дальнейшего изучения
- •Веб-формы как форма безумия
- •Приступим
- •Подсказывающий текст
- •Поля с автофокусировкой
- •Адреса электронной почты
- •Веб-адреса
- •Числа как счетчики
- •Числа как ползунки
- •Выборщики даты
- •Формы поиска
- •Выборщики цвета
- •И еще об одной вещи
- •Для дальнейшего изучения
- •Микроданные и другие красивые слова
- •Приступим
- •Что такое микроданные?
- •Структура микроданных
- •Разметка данных о человеке
- •Разметка данных об организации
- •Разметка данных о событии
- •Разметка клиентских отзывов
- •Для дальнейшего изучения
- •Приложение. Универсальный почти алфавитный определитель всего на свете
- •Элементы
- •Для дальнейшего изучения
Приложение. Универсальный почти алфавитный определитель всего на свете
Не понимаете, как этим пользоваться? Обратитесь к главе 2, где изложены начальные сведения о тестировании HTML5-функциональности. Определять все те же функции позволяет библиотека Modernizr (http://www..modernizr..com).
Элементы
<audio> (http://bit..ly/cZxI7K):
return !!document.createElement(‘audio’).canPlayType;
<audio> в формате MP3 (http://ru..wikipedia..org/wiki/MP3): var a = document.createElement('audio');
return !!(a.canPlayType && a.canPlayType('audio/mpeg;').replace(/no/, ''));
<audio> в формате Vorbis (http://ru..wikipedia..org/wiki/Vorbis): var a = document.createElement('audio');
return !!(a.canPlayType && a.canPlayType('audio/ogg; codecs="vorbis"').replace(/no/, ''));
<audio> в формате WAV (http://en..wikipedia..org/wiki/WAV): var a = document.createElement('audio');
return !!(a.canPlayType && a.canPlayType('audio/wav; codecs="1"').replace(/no/, ''));
<audio> в формате AAC (http://ru..wikipedia..org/wiki/Advanced_Audio_Coding): var a = document.createElement('audio');
return !!(a.canPlayType && a.canPlayType('audio/mp4; codecs="mp4a.40.2"').replace(/no/, ''));
196 Приложение.. Универсальный почти алфавитный определитель всего на свете
<canvas> (см. главу 4):
return !!document.createElement('canvas').getContext;
<canvas>, API рисования текста (см. раздел «Текст» главы 4): var c = document.createElement('canvas');
return c.getContext && typeof c.getContext('2d').fillText == 'function';
<command> (http://bit..ly/aQt2Fn):
return ‘type’ in document.createElement(‘command’);
<datalist> (http://bit..ly/9WVz5p):
return ‘options’ in document.createElement(‘datalist’);
<details> (http://bit..ly/cO8mQy):
return ‘open’ in document.createElement(‘details’);
<device> (http://bit..ly/aaBeUy):
return ‘type’ in document.createElement(‘device’);
<form>, валидация (http://bit..ly/cb9Wmj):
return 'noValidate' in document.createElement('form');
<iframe sandbox> (http://blog..whatwg..org/whats-next-in-html-episode-2-sandbox): return ‘sandbox’ in document.createElement(‘iframe’);
<iframe srcdoc> (http://blog..whatwg..org/whats-next-in-html-episode-2-sandbox): return ‘srcdoc’ in document.createElement(‘iframe’);
<input |
autofocus> (см. «Автофокусировка полей» на с. 148): |
return |
'autofocus' in document.createElement('input'); |
<input |
placeholder> (см. «Подсказывающий текст» на с. 147): |
return |
'placeholder' in document.createElement('input'); |
<input |
type="color"> (http://bit..ly/9HkeNn): |
var i = document.createElement(‘input’); i.setAttribute(‘type’, ‘color’);
return i.type !== ‘text’;
<input type="email"> (см. раздел «Адреса электронной почты» главы 9): var i = document.createElement('input');
i.setAttribute('type', 'email'); return i.type !== 'text';
<input type="number"> (см. раздел «Числа как счетчики» главы 9): var i = document.createElement('input');
Элементы |
197 |
i.setAttribute('type', 'number'); return i.type !== 'text';
<input type="range"> (см. раздел «Числа как ползунки» главы 9): var i = document.createElement('input');
i.setAttribute('type', 'range'); return i.type !== 'text';
<input type="search"> (см. раздел «Формы поиска» главы 9): var i = document.createElement('input'); i.setAttribute('type', 'search');
return i.type !== 'text';
<input type="tel"> (http://bit..ly/bZm0Q5): var i = document.createElement(‘input’); i.setAttribute(‘type’, ‘tel’);
return i.type !== ‘text’;
<input type="url"> (см. раздел «Веб-адреса» главы 9): var i = document.createElement('input'); i.setAttribute('type', 'url');
return i.type !== 'text';
<input type="date"> (см. раздел «Выборщики даты» главы 9): var i = document.createElement('input'); i.setAttribute('type', 'date');
return i.type !== 'text';
<input type="time"> (см. раздел «Выборщики даты» главы 9): var i = document.createElement('input'); i.setAttribute('type', 'time');
return i.type !== 'text';
<input type="datetime"> (см. раздел «Выборщики даты» главы 9): var i = document.createElement('input');
i.setAttribute('type', 'datetime'); return i.type !== 'text';
<input type="datetime-local"> (см. раздел «Выборщики даты» главы 9): var i = document.createElement('input');
i.setAttribute('type', 'datetime-local);
198 |
Приложение.. Универсальный почти алфавитный определитель всего на свете |
return i.type !== 'text';
<input type="month"> (см. раздел «Выборщики даты» главы 9): var i = document.createElement('input'); i.setAttribute('type', 'month');
return i.type !== 'text';
<input type="week"> (см. раздел «Выборщики даты» главы 9): var i = document.createElement('input'); i.setAttribute('type', 'week');
return i.type !== 'text';
<meter> (http://bit..ly/c0pX0l):
return ‘value’ in document.createElement(‘meter’);
<output> (http://bit..ly/asJaqH):
return ‘value’ in document.createElement(‘output’);
<progress> (http://bit..ly/bjDMy6):
return ‘value’ in document.createElement(‘progress’);
<time> (http://bit..ly/bI62jp):
return ‘valueAsDate’ in document.createElement(‘time’);<video> (см. главу 5):
return !!document.createElement('video').canPlayType;
<video>, заголовки (http://bit..ly/9mLiRr):
return 'track' in document.createElement('track');
<video poster> (http://bit..ly/b6RhzT):
return ‘poster’ in document.createElement(‘video’);
<video> в формате WebM (http://www..webmproject..org): var v = document.createElement('video');
return !!(v.canPlayType && v.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/no/, ''));
<video> в формате H.264 (см. раздел «Видеокодеки» главы 5): var v = document.createElement('video');
return !!(v.canPlayType && v.canPlayType('video/mp4; codecs="avc1.42E01E, mp4a.40.2"').replace(/no/, ''));
<video> в формате Theora (см. раздел «Видеокодеки» главы 5): var v = document.createElement('video');
Элементы |
199 |
return !!(v.canPlayType && v.canPlayType('video/ogg; codecs="theora, vorbis"').replace(/no/, ''));
contentEditable (http://bit..ly/aLivbS):
return ‘isContentEditable’ in document.createElement(‘span’);
Drag-and-drop (http://bit..ly/aN0RFQ):
return ‘draggable’ in document.createElement(‘span’);
SVG (http://www..w3..org/TR/SVG/):
return !!(document.createElementNS && document.createElementNS
(‘http://www.w3.org/2000/svg’, ‘svg’).createSVGRect);
SVG в text/html (http://hacks..mozilla..org/2010/05/firefox-4-the-html5-parser-inline-svg- speed-and-more/):
var e = document.createElement(‘div’); e.innerHTML = ‘<svg></svg>’;
return !!(window.SVGSVGElement && e.firstChild instanceof window.SVGSVGElement);
WebSimpleDB (http://dev..w3..org/2006/webapi/WebSimpleDB/): return !!window.indexedDB;
Web Sockets (http://dev..w3..org/html5/websockets/): return !!window.WebSocket;
Web SQL (http://dev..w3..org/html5/webdatabase/): return !!window.openDatabase;
Геолокация (см. главу 6): return !!navigator.geolocation;
История (http://bit..ly/9JGAGB):
return !!(window.history && window.history.pushState && window.history.popState);
Локальное хранилище (http://dev..w3..org/html5/webstorage/):
return ('localStorage' in window) && window['localStorage'] !== null;
Микроданные (http://bit..ly/dBGnqr): return !!document.getItems;
Обмен сообщениями между документами (cross-document messaging) (http://bit.. ly/cUOqXd):
return !!window.postMessage;