HTML5 и его атрибуты для проверки формы

У каждой ссылки на мобильном веб-сайте должен быть хорошо известный атрибут — адрес ресурса, а самым важным ссылкам на странице (их может быть до 10) можно присвоить атрибут для легкого доступа при помощи сочетания клавиш на устройствах, которые поддерживают горячие клавиши, (см. ). Следует избегать использования атрибута кроме тех случаев, когда сайт разрабатывается для смартфонов с поддержкой вкладок и многостраничности.

Некоторые устройства поддерживают использование для фокус-элементов (ссылки, элементы форм) для изменения порядка таб-обхода элементов. Но, не рекомендуется изменять естественный порядок этого обхода, если только это не проект со сложным дизайном и нужно улучшить юзабилити сайта.

В устройствах с фокус-навигацией (как правило это low-end и некоторые сенсорные устройства с сенсорной панелью или колесом прокрутки, вроде Nexus One или некоторых BlackBerry) важно определить все интерактивные зоны. Например, если хочешь, чтобы одновременно и заголовок, и описание были активными, то нужно использовать один тег ссылки для обоих элементов, а не делать две отдельные ссылки на одной странице.

Новые окна

Некоторые браузеры понимают атрибут target="_blank" (стандарт XHTML MP), но варианты поведения могут быть разными (таблица 6.7). В некоторых браузерах ссылка просто открывается в том же самом окне, другие открывают в новом окне или вкладке (и такой вариант позволяет пользователю переключаться между окнами/вкладками) или URL может открываться как всплывающее окно и в таком случае пользователь не может вернуться к предыдущей странице, пока не закроет новую.

Табл. 6.7. Таблица поддержки открытия ссылки в новом окне
Браузер/ Платформа Ссылка в новом окне
Safari Откроется в новом окне (максимальное количество 8)
браузер Android Откроется в новом окне
Symbian/S60 Откроется в новом окне (пользователю нелегко перемещаться между окнами)
Nokia Series 40 Откроется в том же окне до 5-го выпуска
Откроется в новом окне в 6-м выпуске
webOS Откроется в новой карте (окне ОС)
BlackBerry Откроется в том же окне до версии OS 6.0
NetFront Откроется в том же окне
Openwave (Myriad) Откроется в том же окне
Internet Explorer Откроется в том же окне
Motorola Internet Browser Откроется в том же окне
Opera Mobile Откроется в том же окне
Opera Mini Откроется в новом окне с версии 5.0

Навигационные списки

Навигационный список — это список ссылок, которые каким-то образом связаны и перечисляются в списке друг за другом. Рекомендуется при создании такого списка использовать теги

    или
      (для устройств, где не поддерживается accesskey). С упорядоченными списками, номер клавиши для быстрого доступа мы получаем автоматически, но атрибут accesskey придется добавить вручную:

      Ссылки на телефонные номера

      Есть несколько схем URL, используемых многими мобильными браузерами для связи с некоторыми функциями мобильного телефона.

      Одна из них — стандарт Wireless Telephony Application Interface (WTAI), является частью стандарта WAP 1.X (разработан в предыдущем столетии). Библиотеки WTAI предустанавливаются на телефон, а другие приложения (например, браузер) могут получить к ним доступ. Для использования этих библиотек (если они, конечно, есть) применяй синтаксис wtai:///[(;parameter)*].

      Вызов

      Помни, что большинство мобильных устройств одновременно являются еще и телефонами! Так почему бы не делать вызов номера по клику на ссылку? Если ты делаешь какой-нибудь бизнес-гид или же свою уникальную телефонную книгу, то учти, что большинство людей предпочитает звонить конкретному человеку, а не заполнять форму в устройстве.

      На рисунке 6.5 демонстрируется, как работает link-to-call на разных мобильных устройствах.

      К счастью, есть определенные URL которые могут нам существенно помочь. Первый и уже практически стандартный вариант (скопирован с японских i-Mode стандартов) предполагает использование схемы tel:<номер телефона>. Такой вариант называют i-Mode режимом:

      Call us free!

      В некоторых устройствах есть возможность после того, как абонент ответил, отправлять DTMF-тона. Такая возможность весьма полезна, когда звоним в справочные службы или голосовые почты. Ты можешь задать ссылке «позвонить по этому номеру телефона и после ответа нажать 2, подождать 2 секунды и набрать #913». Все это сделать ты можешь при помощи параметра postd. Синтаксис в таком случае: ;postd=. Ты можешь использовать числа, символы "*" и "#" (используя закодированный URL со значением %23), а также p для паузы в 1 секунду и w для паузы пока не ответят:

      Call us free!

      Не во всех мобильных устройствах работает эта функция, но даже при отсутствии поддержки остается возможность вызова основного телефонного номера. Список совместимых устройств для этой функции довольно сложен и я в общем-то не рекомендую на него полагаться.

      При активации пользователем ссылки вызова в ответ приходит оповещение, в котором у пользователя запрашивают подтверждение на выполнение действия (вызов номера) и при этом номер полностью показан на экране (рисунок 6.6). Такое оповещение показывается пользователю во избежание мошенничества и ошибочных вызовов на платные номера.

      Я рекомендую использовать номер в международном формате: знак +, код страны, код региона (оператора) и сам номер. Ведь мы не знаем, где может оказаться наш пользователь, но даже если он находится в той же стране или том же регионе, что и вызываемый абонент, международный формат номера все равно будет работать.


      Рис. 6.6. Nokia и BlackBerry предлагают подтвердить вызов, а NetFront браузер от Sony Ericsson предоставляет пользователю меню, предлагая различные способы работы с этой ссылкой.

      Из таблицы 6.8 видно, что функции ссылки вызова не так хорошо поддерживаются на разных платформах, как, например, tel:. Есть еще другой способ произвести звонок: используя стандарт WTAI при помощи бесплатной библиотеки "wp" и функции "mc" (make call):

      Call us free!

      Также в WTAI ссылка может быть активирована даже во время совершения вызова, правда такая возможность может быть полезна только если используется режим hands-free или гарнитура. В ссылку включаются тоны, которые отправляются адресату так, как если бы пользователь сам нажал необходимые символы на клавиатуре, а определяются они при помощи функции "sd" (send DTMF tones) из библиотеки "wp".

      Браузер BlackBerry автоматически определяет номера телефонов и адреса электронной почты и преобразовывает их в ссылки. Если же тебе такая функция не нужна, то отключить ее можно мета тегом < http-equiv="x-rim-auto-match" content="none">. В Safari для такого случая есть свой собственный мета тег:

      В сетях iDEN (вроде Nextel) для совершения вызова внутри сети используются радио-пакеты. Если среди твоих пользователей есть абоненты таких сетей — например, они используют ее для интранета — то ты можешь обеспечить пользователю возможность внутренних вызовов к другим членам команды (или же внешние вызовы за пределы сети) используя Direct Connect URL схему (dc:). Схема Direct Connect URL совместима с iDEN-устройствами от BlackBerry:

      Ping John

      В некоторых устройствах при нажатии на ссылку tel: пользователю предоставляется возможность выбрать из меню вариант вызова — голосовой или видеовызов (такой вариант доступен только в сетях 3G). В некоторых японских телефонах видеовызов по ссылке должен осуществляться при помощи протокола tel-av:<номер телефона>.

      В таблице 6.8 показано как на разных платформах работают URI-схемы голосового вызова.

      Табл. 6.8. Таблица поддержки голосовых вызовов
      Браузер/ Платформа Поддержка tel: Поддержка WTAI
      Safari Да Нет
      браузер Android Да Да
      Symbian/S60 Да Да
      Nokia Series 40 Да Да
      webOS Да Нет
      BlackBerry Да Да
      NetFront Да, для звонков и добавления в менеджер контактов
      Openwave (Myriad) Да Да
      Internet Explorer
      Motorola Internet Browser Да, для звонков, SMS, и добавления в менеджер контактов
      Opera Mobile Да Да
      Opera Mini Да (кроме устройств Java MIDP 1.0)

      iPod Touch — мобильное устройство, но это не телефон и здесь нет возможности голосового вызова. Вместо этого пользователь получает подсказку добавить номер в телефонную книгу при помощи ссылки tel:.

      Отправка email

      В некоторых современных устройствах с браузерами также есть почтовые приложения, которые способны реагировать на стандартный веб-протокол mailto: . Синтаксис: mailto:[?parameters]. Обнаруженные параметры могут изменяться в зависимости от устройства, но обычно они включают "cc", "bcc", "subject", и "body". Параметры определяются в формате URL (key=value&key=value) и значения должны быть URI-закодированны.

      Вот несколько примеров:

      Mail us Mail us Mail us

      Имей в виду, что механизм mailto: не гарантирует, что сообщение будет отправлено. Как правило, он просто открывает почтовое приложение и пользователь должен подтвердить отправку после внесения дополнительных изменений. Если тебе действительно нужно отправить почту, то рекомендую использовать серверный механизм.

      Обычно, если мы хотим вставить в тело email-сообщения новую строку, то мы используем перевод каретки плюс возврат строки — символы (%0D%0A). Такой вариант не корректно работает с приложением Mail в iOS, но мы можем вставить HTML-теги в body, поэтому мы можем использовать в мобильном браузере Safari:

      Mail us This%20is%20a%20new%20line">Mail us from iPhone

      Отправка SMS

      Нам всем нравится SMS и именно поэтому мобильные браузеры обычно предлагают пользователю прямо из сообщения открыть ссылку в новом окне. Для реализации такой возможности у нас есть две возможные URI схемы: sms:// и smsto://. К сожалению, нет стандартного способа узнать, какая из этих схем точно будет совместима с браузером пользователя.

      Позже (в Главе 10) мы рассмотрим, как с сервера обнаружить протокол совместимости sms: и smsto: и выбрать подходящий вариант.

      Синтаксис: sms://[][?parameters]. Как видишь, номер адресата является опцией (необязателен) и поэтому ты можешь открыть с устройства SMS редактор без каких-либо определенных параметров.

      Обычно определяют body, но по соображениям безопасности это свойство не совместимо со всеми мобильными устройствами (например, чтобы оградить пользователя от сайтов, отправляющих бесплатные SMS). Как и в случае с отправкой email, SMS не отправляется автоматически, когда пользователь нажимает на ссылку. При нажатии на ссылку открывается окно SMS редактора и пользователь должен закончить процесс вручную.

      Номер адресата должен быть или в международном формате, или же, если это короткий номер, мы должны гарантировать, что пользователь находится в корректной стране (не в роуминге) и соединен с совместимым с коротким номером поставщиком услуг связи.

      BlackBerry обеспечивает прямой обмен сообщениями между двумя устройствами BlackBerry в одной и той же сети. Для создания прямого сообщения ты можешь использовать URL-схему PIN:.

      Вот некоторые примеры:

      Send an SMS Invite a friend by SMS Contact us by SMS More info for producto AA2

      Работа с MMS

      Multimedia Messaging Service (MMS) — стандартный способ отправки сообщения с мультимедийным контентом (изображения, видео или любой другой присоединенный контент). Symbian устройства позволяют нам использовать URI-схемы mms: для загрузки файла MMS с указанного URL и mmsto:// для открытия редактора мультимедийного сообщения.

      В таблице 6.9 перечислена поддержка функций сообщений на разных платформах.

      Табл. 6.9. Таблица поддержки функций сообщений
      Браузер/ Платформа Схема sms:/smsto: Схема mms:/mmsto: Схема mailto:
      Safari Только sms: и в iPhone (не в iPad/ iPod). Нет поддержки body. Нет Да
      браузер Android Да, но нет поддержки number или body Да
      Symbian/S60 Только sms: Только mmsto: Да
      Nokia Series 40 Нет (вместо этого можно использовать mailto:) Нет Да (она также может быть использована для SMS и MMS)
      webOS Только sms: Нет Да
      BlackBerry Нет Нет Да
      NetFront Да Да Да
      Openwave (Myriad) Нет Нет Да
      Internet Explorer Только sms: Нет Да
      Motorola Internet Browser Нет Нет Да
      Opera Mobile Да Да Да
      Opera Mini В зависимости от устройства

      В помощь при разработке мобильных виджетов или оффлайновых JavaScript приложений практически на каждой платформе есть низкоуровневый API для отправки и даже получения сообщений от самого приложения. Подробнее мы рассмотрим эти технологии позже (Глава 12).

      Добавление контакта в телефонную книгу

      Было бы неплохо предлагать пользователям добавить информацию о твоей компании (номер телефона или еще какие-нибудь детали) в телефонную книгу (список контактов). В старых WML-устройствах есть для таких целей функция WTAI, а для более новых устройств есть другой, более умный способ.

      В библиотека WTAI "wp" — это функция для вызова, а "ap" (Add to Phonebook) — для добавления в телефонную книгу. Параметры — номер и имя (необязательно) — разделяются точкой с запятой. Например:

      Add White House to contacts

      В случае с современными браузерами (теми, где не поддерживается WTAI, рисунок 6.7) основной фокус в создании файла vCard (vCard — это стандартный формат файла для электронных визитных карточек). Если ты сделаешь ссылку на этот файл, то большинство браузеров отправит его в Phonebook приложение устройства и пользователь получит предложение добавить контакт в телефонную книгу.

      Рис. 6.7. Мы должны быть осторожны при использовании схем URI на несовместимых устройствах. Пользователь не оценит сообщений об ошибках.

      Простой файл vCard 2.1 (у этой версии самая лучшая поддержка в мобильных устройствах) будет выглядеть так:

      BEGIN:VCARD VERSION:2.1 N:Maximiliano;Firtman ORG:O"Reilly Media TITLE:Author TEL;CELL;VOICE:+133MFIRTMAN TEL;WORK;VOICE:+541150320077 END:VCARD

      Чтобы мобильное устройство смогло определить этот текстовый файл как валидный файл vCard, мы должны отправлять его с MIME-типом text/x-vcard. Обычно, если файл статичный, расширение у него.vcf.

      Например, мы можем открыть нативное приложение Facebook для iPhone (если оно установлено) со списком друзей при помощи URL fb://friends, а если у пользователя установлен Twitterrific (Twitter клиент), то можно отправить сообщение при помощи twitterrific://post?message= . Вот пример:

      Tweet this on Twitterrific

      При передаче по URL параметров помни о правильном кодировании пробелов и других символов (например, используй %20 для пробелов).

      Как обнаружить, что приложение установлено

      Что произойдет, если в мобильном Safari пользователь кликнет по ссылке, которая открывает приложение, а это приложение не установлено у него на телефоне? В таком случае браузер показывает пользователю предупреждение и остается на той же странице. Мы можем использовать этот прием для улучшения юзабилити. Сделай на JavaScript таймер, который будет запускаться, когда пользователь кликает по ссылке; если отсчет времени на таймере быстро заканчивается — значит у пользователя не установлено необходимое приложение и, соответственно, не может быть открыто. Мы не можем совсем убрать сообщение Safari, но мы можем отправить пользователю сообщение об ошибке, где будет указано, что приложение не установлено, а еще будет дана ссылка на App Store, где его можно купить или скачать.

      Локальные приложения Symbian

      В устройствах Symbian мы можем открывать приложения при помощи нестандартной схемы localapp. Например, чтобы открыть Календарь, Контакты или Сообщения (Calendar, Contacts, Messages) нам нужно использовать localapp:calendar, localapp:contacts или localapp:messaging.

      Интенты Android

      В Android также есть возможность связи с другими приложениями при помощи интентов (intents). Нативное приложение Android может отреагировать на интент как на явный вызов (что недоступно для веб-приложений) от URL или от MIME-типа.

      Например, чтобы автоматически открыть установленный (и выбранный по умолчанию) на устройстве пользователя просмотрщик PDF-файлов, файл PDF должен отправляться вместе с MIME-типом application/pdf. Для открытия приложения без отправки файла нужно использовать определенную интентом схему URI. Например, ссылки на видео YouTube автоматически запустят установленное приложение YouTube (если, конечно, пользователь определил его как проигрыватель по умолчанию).

      Когда интент неявный (то есть, используется URL, а не уникальное имя пакета), то на URL может отреагировать более одного установленного приложения. В таком случае пользователь получает окно с предложением выбрать нужное приложение и здесь же может выбрать, какое приложение будет открываться по умолчанию для будущих использований.

      В Android интенты могут быть зарегистрированы как часть HTTP URL или может быть активированы с MIME-типом. Например, если мы в браузере Android перейдем по ссылке http://www.google.com/m/products/scan, то он попытается открыть приложение Barcode Scanner.

      Во внутренних URL, которые поддерживаются Android используются гео-метки для Google Maps: , ; гео-поиск для Google Maps: 0,0?q=; для Google street views используется google.streetview:cbll=, &cbp=1> . Больше информации на http://developer.android.com/guide/appendix/g-app-intents.html .

      Аналогично при открытии Android Market (магазин приложений и игр) с поисковым запросом используется market://search?q=.

      Когда в Android URI-схема не регистрируется как интент, это значит что приложение не установлено на устройстве пользователя. Если ты, например, даешь пользователю ссылку на несуществующий сайт или страницу, то в таком случае пользователь увидит новую страницу с сообщением об ошибке.

      К сожалению, на момент написания этой статьи не было ни одного ресурса, где были бы перечислены все URI-схемы для Android. Правда, некоторые приложения предлагают разработчику веб-сайты, где содержится подобная информация. Например, у приложения Twidroid (Twitter-клиент) есть сайт http://twidroid.com/plugins , где ты можешь изучить документацию об использовании URL, чтобы сделать на своей странице отправитель сообщений в Twitter. Синтаксис URL в таком случае будет таким: twitter://send?. Следовательно, ранее рассматриваемый нами пример для Twitterrific может быть преобразован в:

      Tweet this on Twidroid

      Как ты увидишь позже (глава 12), при разработке виджетов для связи с нативными приложениями мы будем использовать нестандартные API.

      Загрузка документа

      Ссылка на не-(X)HTML файл может дать совершенно разные результаты в зависимости от устройства. Ты сразу можешь подумать, что это зависит от установленных на устройстве приложений. Частично так. Некоторые мобильные браузеры (например на iPhone) не разрешают загружать документ даже если пользователь установил соответствующий такому типу документа ридер (рисунок 6.8). В других браузерах, например Symbian, пользователь может сохранить документ (рисунок 6.9).


      Рис. 6.8. Safari на iOS открывает PDF-файлы непосредственно, но не загружает документы.

      Рис. 6.9. У браузера Symbian есть Download Manager, который может загружать любой файл во внутреннюю или внешнюю память.

      В таблице 6.11 показаны варианты реакций по умолчанию в разных браузерах, когда мы предоставляем файл в нестандартном формате (например, invented one), а также файлы в самых распространенных форматах Adobe PDF и Microsoft Office (.doc, .xls, и т. д.).

      Табл. 6.11. Таблица поддержки загрузки документов
      Браузер/ Платформа Неизвестный формат Adobe PDF Microsoft Office
      Safari Нет Да. Пользователь может просмотреть PDF но не может загрузить его. Да. 2007 и частично 2010. Word, Excel, PowerPoint Viewer.
      браузер Android Да
      Symbian/S60 Да Да, но у пользователя должен быть установлен совместимый просмотрщик или редактор
      Nokia Series 40 Да Да, но не может просмотреть. Только загрузить.
      webOS Да Да, но у пользователя должен быть установлен совместимый просмотрщик или редактор
      BlackBerry Да Да Да. Word, Excel, PowerPoint 2007.
      NetFront Да Только загрузить.
      Openwave (Myriad) Нет Нет Нет
      Internet Explorer Да Да, но нужен просмотрщик Да
      Motorola Internet Browser Нет Нет Нет
      Opera Mobile

      Эта подборка полезных сниппетов, использующих HTML5, может помочь вам улучшить ваш сайт.

      Автозаполнение в текстовых полях

      Используя HTML5-элемент datalist вы можете создать текстовое поле с автозаполнением. Очень удобно!

      Поля ввода email, url и tel

      В HTML5 появилось множество новых типов для полей ввода, и среди них email , url и tel . Они позволяют писать более красивый код, делают за вас всю работу по валидации контента, а так же заставляют мобильные браузеры отображать сенсорную клавиатуру со специальными кнопками (вроде @ и.com) при заполнении этих полей.


      Шаблоны на соответствие полей формы регулярному выражению

      Раньше вам приходилось использовать JavaScript для валидации контента на фронтэнде. Теперь, с HTML5-атрибутом pattern , вы можете просто указать регулярное выражение, которому должны соответствовать вводимые данные!

      Кастомное контекстное меню

      HTML5 позволяет добавлять элементы в контекстное меню (это то самое меню, которое появляется, если кликнуть правой кнопкой мыши где-нибудь на вашей странице).
      На момент написания статьи, элемент ContextMenu совместим только с Firefox, но можно надеяться, что другие браузеры добавят его поддержку в самое ближайшее время.

      Да, можно кликнуть правой кнопкой прямо здесь.

      Видео на HTML5, с резервным Flash-проигрывателем.

      Одна из самых больших новых возможностей HTML5, безусловно, его способность воспроизводить видео без использования Flash. Но для старых браузеров, не совместимых с HTML5, вы должны реализовать флэш-проигрыватель, как запасной вариант. В следующем примере показано, как вставить mp4 и ogv видео в HTML5, с резервным проигрывателем для старых браузеров.

      Скрытые элементы в HTML5

      В HTML5 появился атрибут hidden , который можно применить к любому элементу. Его действие аналогично CSS-свойству display:none .

      Автофокус для текстовых полей

      Аттрибут autofocus позволяет вам установить фокус на определенный элемент при загрузке страницы. Полезно, например, для страниц поиска, авторизации или регистрации.

      Предварительная загрузка в HTML5

      Jean-Baptiste Jung написал о предварительной загрузке в HTML5. Если в кратце - то это простой способ уведомить браузер о том, какие ресурсы скоро могут понадобиться, чтобы он загрузил их заранее (например картинки, подгружаемые аяксом). В приведенном ниже коде реализуется предварительная загрузка изображения.

      Воспроизведение аудиофайлов на HTML5

      HTML5 может воспроизводить видео и, конечно, он также может воспроизводить аудиофайлы, например, в формате mp3 . В коде ниже реализуется минималистичный но функциональный аудиоплеер.