Какие события DOM доступны для WebKit на Android?

Я создаю мобильное веб-приложение, ориентированное на пользователей Android. Мне нужно знать, какие события DOM мне доступны. Я смог выполнить следующую работу, но не очень надежно:

  • нажмите
  • наведение мыши
  • наведение мыши
  • мышь
  • изменять

Я не смог заставить работать следующее:

  • нажатие клавиши
  • нажатие клавиши
  • ключ

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

Спасибо!

Обновление: я задал тот же вопрос на список разработчиков Android. Я проведу еще несколько тестов и опубликую свои результаты здесь и там.


person Andrew Hedges    schedule 24.01.2009    source источник


Ответы (3)


Хорошо, это интересно. Мой вариант использования заключается в том, что у меня есть серия ссылок (теги A) на экране в представлении WebKit. Чтобы проверить, какая область событий доступна, с помощью jQuery 1.3.1 я прикрепил каждое событие, указанное в этой странице (даже те, которые не имеют смысла) на ссылки, затем использовали элементы управления вверх, вниз и ввод в эмуляторе Android и отмечали, какие события срабатывали при каких обстоятельствах.

Вот код, который я использовал для прикрепления событий, с последующими результатами. Обратите внимание: я использую «живую» привязку событий, потому что для моего приложения теги A вставляются динамически.

$.each([
    'blur',
    'change',
    'click',
    'contextmenu',
    'copy',
    'cut',
    'dblclick',
    'error',
    'focus',
    'keydown',
    'keypress',
    'keyup',
    'mousedown',
    'mousemove',
    'mouseout',
    'mouseover',
    'mouseup',
    'mousewheel',
    'paste',
    'reset',
    'resize',
    'scroll',
    'select',
    'submit',

    // W3C events
    'DOMActivate',
    'DOMAttrModified',
    'DOMCharacterDataModified',
    'DOMFocusIn',
    'DOMFocusOut',
    'DOMMouseScroll',
    'DOMNodeInserted',
    'DOMNodeRemoved',
    'DOMSubtreeModified',
    'textInput',

    // Microsoft events
    'activate',
    'beforecopy',
    'beforecut',
    'beforepaste',
    'deactivate',
    'focusin',
    'focusout',
    'hashchange',
    'mouseenter',
    'mouseleave'
], function () {
    $('a').live(this, function (evt) {
        alert(evt.type);
    });
});

Вот как вытряхнуло:

  • При загрузке первой страницы ничего не выделено (без уродливой оранжевой рамки выбора вокруг любого элемента), с помощью кнопки «вниз» для выбора первого элемента запускаются следующие события (по порядку): mouseover, mouseenter, mousemove, DOMFocusIn

  • При выборе элемента, переходе к следующему элементу с помощью кнопки вниз, запускаются следующие события (по порядку): mouseout, mouseover, mousemove, DOMFocusOut, DOMFocusIn

  • При выборе элемента нажатие кнопки «Ввод» вызывает следующие события (по порядку): mousemove, mousedown, DOMFocusOut, mouseup, click, DOMActivate

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

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

person Andrew Hedges    schedule 24.01.2009

Поскольку это второй по популярности пост Android + JavaScript на SO (это всего лишь грустный комментарий о состоянии веб-разработки, ориентированной на платформу Android), я подумал, что, возможно, стоит включить ссылку на результаты тестирования сенсорных событий pkk в http://www.quirksmode.org/mobile/tableTouch.html, а также http://www.quirksmode.org/mobile/ в целом.

person Oskar Austegard    schedule 03.11.2010

Начиная с Android 1.5 те же события touch(start|move|end|cancel), которые поддерживает iPhone, работают и в Android.

Одна проблема, которую я обнаружил, заключалась в том, что концы touchmove ставятся в очередь. Пока нет обходного пути.

person Roman Nurik    schedule 07.05.2009
comment
Поддерживает ли он также события касания Iphone? Будет ли он? Я заметил, что это хорошо работает на моем JFADP1.5: iphone.opencyclemap.org - person hendry; 08.05.2009