Реклама

Главная arrow Статьи arrow Для подготовленных arrow Opera Mini 4 и поддержка JavaScript

Opera Mini 4 и поддержка JavaScript

02.11.2007 | Mister Nobody | Для подготовленных

Opera Mini отличный способ доставить веб на ваш мобильный телефон, она работает даже на слабеньких моделях с поддержкой Java. В основном веб-запросы отправляются Opera Mini на сервера, которые конвертируют страничку в OBML(Opera Binary Markup Language, очень компактный двоичный формат разметки, который уменьшает размер страниц на 90%, а затем отправляет на ваш телефон. Сервера отлично справляются с обработкой разметки и стилей – HTML и CSS содержимое преподносится в удобном виде. Но можно ли сказать это о JavaScript? Здесь не всё так просто, и эта статья как раз посвящена этому вопросу.

Статья состоит из следующих частей:

  1. Как OM обрабатывает JavaScript?
  2. Серверная обработка
  3. Клиентская обработка
  4. Поддержка AJAX

Безопасности Opera уделяет особое внимание, серьёзно подходя к делу. Соединение с сервером всегда шифруется, не важен протокол подключения к сайту - http или https, вы всегда можете доверять OM.

Как OM обрабатывает JavaScript?

Необходимо обратить внимание, где выполняется JavaScipt – на сервере, перед загрузкой или после загрузки страницы. Серверы используют движок рендеринга Opera 9.5, что означает полную поддержку JavaScript (стандарт ECMAScript 4) на стороне сервера.

Однако, на клиентской стороне поддержка ограничена возможностями телефона, в следствии этого Opera Mini предоставляет небольшой набор средств JavaScript:

  1. Ограниченную поддержку событий модели DOM
  2. Отсутствие фонового выполнения скриптов
  3. Очень ограниченный механизм AJAX

Теперь рассмотрим это в деталях

Серверная обработка

Как было перечислено выше, серверы используют новый движок рендеринга Opera 9.5, что означает, что все скрипты исполняются перед тем, как страница полностью загружена, и когда страница загрузится в OM она будет работать, как предполагалось. Это включает манипуляцию элементов в DOM-дереве. Более того, событие onLoad элемента body отрабатывает на стороне сервера перед тем как страница передана клиенту. Единственное ограничение, на которое необходимо обратить внимание то, что мы не можем разрешить исполнение скриптов дольше 1-2 секунд после загрузки страницы, а также разрешить выполнение скриптов до каких-либо действий со стороны пользователя(, например, щелчка по ссылке или отправке формы), по этой причине функции interval() и delay() отключены. Это же относится и к xmlrpc-запросам – они работают, но только пару секунд. Как только страница отправлена клиенту, выполнение скриптов останавливается.

Клиентская обработка

После передачи страницы клиенту, ограничений становится значительно больше, в основном все события обрабатываются на сервере. Клиент не обрабатывает JavaScript совсем, вместо этого страница хранится на сервере – клиенты работают как устройство ввода для opera, запущенной на сервере. Фоновые скрипты после загрузки не исполняются, и исполнить код используя setTimeout невозможно.

События, поддерживаемые клиентом:
  1. Загрузка: нормальная обработка события совершена для onLoad и UnLoad
  2. Формы:
    1. onSubmit
    2. OnChange: работает даже во время заполнения полей формы, а не только при отправке всей формы. Например, если у вас 2 поля «Выбор страны» и «Выбор региона» и измение второго зависит от первого, то при изменение страны страница будет перезагружена, чтобы показать изменения
    3. onClick на кнопках (не забывайте, что события могут быть обработаны только когда форма отправлена, а не во время редактирования, поэтому onFocus не работает)
  3. onClick реализован как движении мышью в координату щелчка (onMouseEnter, onMouseOver, onMouseLeave) затем следует onMouseDown затем onMouseUp и в конце концов onClick.

Все остальные события игнорируются либо не применимы, например:

  1. события от клавиатуры/мыши (onMouseOver/-Out/-Down/-Up, onKeyDown/-KeyPress)
  2. события фокусировки на элементе (onBlur, onFocus, как указано выше)

Это кажется не очень удачным решением, но есть другая сторона – Opera Mini может выполнить JavaScript на сервере, если будет одно из вышеперечисленных событие JavaScript на клиентской стороне, инициализирующее обращение к серверу, таким образом даже сложные страницы работают на удивление хорошо, так Facebook способен отображать всплывающие меню и диалоги наилучшим образом в OM

Поддержка AJAX

В соответствии с ограничениями телефона и клиент-серверной архитектуры Opera Mini приложения использующие AJAX не могут работать как должны на Opera Mini. XMLHttpRequest поддерживается и многие AJAX сайт работают отлично, например iGoogle( вы не можете двигать ящики, но вы можете добавлять и удалять их, менять темы) и GMail(практически всё работает, но почта не проверяется автоматически).

Сайты, использующие AJAX для постоянного изменения страницы, такие как GoogleSuggest, а также автоматическая проверка почты в GMail, указанная выше, не работают. Другие примеры не поддерживаемых технологий – IRC-подобные чат клиенты использующие серверные события и таймеры.

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

Всё сводится к тому, что однажды отрендеренная сервером страница, не будет изменяться пока пользователь чего-нибудь не сделает.

Источник: JavaScript support in Opera Mini 4

Оставьте комментарий
« Пред.   След. »