Мобильный JavaScript
Процесс проектирования для Веб должен включать в себя больше, чем просто сам контент и способы его представления. Пользователь хочет видеть интерактивный и отвечающий его требованиям сайт. К счастью для нас, JavaScript для мобильной разработки хоть и с некоторыми ограничениями, но очень похож на уже привычный и знакомый JavaScript.
Мы уже говорили немного о стандарте WAP 1.1 и языке скриптов WMLScript. Мы не будем углубляться в изучение этого устаревшего языка, но если тебе вдруг понадобится написать что-нибудь с его помощью, то разобраться с ним будет несложно. В стандарте WAP 2.0, который и дал нам, собственно, XHTML MP и WAP CSS, отсутствует поддержка скриптов. И в течении нескольких лет этот факт доставлял существенные неудобства, ведь до этого у нас была возможность работать со скриптами в WAP 1.1.
К счастью, спустя несколько лет появились браузеры с хоть какой-то поддержкой JavaScript (или, если говорить совсем точно, то с поддержкой ECMAScript). Для мобильных скриптов труднее определять стандарты, чем для CSS. Преимущество JavaScript в том, что в большинстве случае (ну кроме некоторых багов), он может сам, во время выполнения, проверить доступна ли для использования определенная функция, объект или API и, таким образом, дает нам возможность писать код для разных стандартов.
Стандартное название JavaScript — ECMAScript, потому как он был создан частной международной некоммерческой организацией ECMA. На рынке есть три известных языка (или диалекта): JavaScript (торговая марка принадлежит Sun, лицензией распоряжается Mozilla Foundation), ActionScript (торговая марка Adobe) и JScript (торговая марка принадлежит Microsoft). В основе все троих лежит тот же самый язык с некоторыми дополнениями.
Мобильный стандарт называется ECMAScript Mobile Profile (ESMP). Также как и с XHTML MP и WAP CSS, стандартизировал его Open Mobile Alliance (OMA). За все мои 10 лет работы в Интернете я ни разу не слышал, чтобы кто-нибудь, разработчик или компания, говорили об ESMP. Это сабсет языка ECMAScript и на самом деле это тот же JavaScript, просто с некоторыми неучтенными и добавленными (импортированными из WMLScript) функциями.
В OMA стандарте XHTML MP 1.2 рекомендуется использовать ESMP, но мы будем работать только со стандартным кодом JavaScript, причем как можно более чистым.
VBScript — очень похожий на уже рассмотренные язык (создан Microsoft на основе Visual Basic), но он совместим только с декстопным Internet Explorer и не поддерживается в Pocket IE (сейчас известен как Mobile Internet Explorer).
Доступно много версий JavaScript (на момент написания этой книги — от 1.0 до 1.8). Версия 1.3 лучше всего поддерживается во всех типах браузеров (начиная от тех, что установлены на low-end устройствах и заканчивая смартфонами) и именно этой версии мы уделим больше всего внимания. Для mid-end устройств и смартфонов больше всего подходит версия 1.5. Более новые версии работают только в последних версиях Firefox и Safari (в том числе и в Safari на iOS). JavaScript-разработчики часто не в курсе о существовании разных версий языка, поэтому мы не будем сравнивать разные версии, а поговорим о поддержке конкретных функций.
У Java и JavaScript из общего только первые четыре буквы.
Ну ладно, еще у них обоих C-синтаксис, оба эти языка объектно-ориентированные ну и еще несколько общих черт. Но это действительно разные языки. Но при этом, я нередко слышу, как разные разработчики говорят об этих языках, как будто они совершенно идентичны.
Поддерживаемые технологии
Далее мы протестируем уровень поддержки JavaScript, но для успешной работы с этим языком важна не только поддержка его самого, но и некоторых дополнительных технологий. Есть много технологий (или API), связанных с JavaScript, но они все выступают лишь в роли дополнения и работают далеко не со всеми устройствами.
Объектная модель документа (DOM)
DOM — набор правил для управления, просмотра и редактирования XML и HTML документов при помощи ряда API правил, которые могут быть применены во многих языках. Не смотря на то, что многие разработчики думают, что DOM — это из области JavaScript, это на самом деле не так. Существуют DOM API-интерфейсы для PHP, .NET, Java и многих других языков.
Даже если ты никогда не слышал о DOM, сейчас как раз отличный шанс начать его использовать. Если ты пользовался известной функцией document.getElementById, значит ты уже знаком с DOM.
Сегодня DOM — это спецификация W3C. С точки зрения поддержки, лучше всего для веб-разработки подходят версии DOM Level 2 Core Specification (DOM2CORE) и под-спецификация DOM Level 2 HTML (DOM2HTML) для HTML и XHTML документов.
Благодаря DOM мы можем просмотреть структуру документа XHTML, динамически из JavaScript и без перезагрузки страницы внести какие-то изменения и дополнения. Мобильный браузер способен поддерживать JavaScript, но без DOM-функционала. Есть несколько браузеров, в которых можно просмотреть дерево документа, но они, все-таки, не позволяют «на лету» вносить изменения в документ.
Ajax
Ajax (изначально акроним Asynchronous JavaScript and XML) — способ, который позволяет создавать асинхронные запросы к серверу, без необходимости перезагружать страницу, прерывать действия пользователя, изменять историю браузера или терять глобальные переменные состояния.
Почему я сказал «изначально акроним»? Сегодня термин Ajax используется в более общем смысле для определения интерактивных Web 2.0 приложений, которые используют асинхронные запросы к серверу, но могут быть или наоборот, не могут быть записаны в XML. Я много слышал об Ajax на динамических сайтах с использованием jQuery UI, ExtJS или других элементов управления c расширенной функциональностью, которые на самом деле не отправляют никаких фоновых запросов на сервер.
Магия Ajax — это XMLHttpRequest — нативный JavaScript-объект, доступный для устройств с соответствующей поддержкой, основывается на ActiveX объекте, созданном Microsoft в Internet Explorer 5.0.
JSON
JavaScript Object Notation (известен как JSON) представляет собой легкий формат для обмена данными, совместим практически со всеми популярными языками. Иногда используется в JavaScript в качестве замены других форматов для передачи данных (например, XML). Может использоваться в Ajax-запросах. Чуть позже мы рассмотрим о некоторых особенностях его применения в разных мобильных браузерах.
HTML 5 API
С появлением HTML5, Javascript стал поддерживать некоторые новые API для клиентских сценариев и работы с документом. Мобильные браузеры уже добавили поддержку некоторых из них, даже не смотря на то, что сам стандарт еще не принят и находится в стадии обсуждения. Вот некоторые API, которые мы рассмотрим в этой главе:
- Оффлайновые приложения;
- Клиентское хранение;
- Рисование с Canvas;
- Workers;
- Геолокация.
Расширения платформы
На некоторых устройствах доступен еще один, встроенный, вид расширений для веб-приложений и многие установленные приложения понимают JavaScript API (их также называют мобильными виджетами, рассмотрим их позже, в Главе 12). Эти JavaScript API могут поддерживать такие сервисы:
- Обмен сообщениями;
- Управление адресной книгой;
- Геолокация;
- Камера;
- Календарь;
- Информация о текущем статусе (состоянии) устройства;
- Нативное меню.