Какие события DOM доступны для WebKit на Android? - PullRequest
32 голосов
/ 24 января 2009

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

  • нажмите
  • Mouseover
  • MouseDown
  • MouseUp
  • изменение

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

  • 1018 * нажатие клавиши *
  • KeyDown
  • KeyUp

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

Спасибо!

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

Ответы [ 3 ]

22 голосов
/ 25 января 2009

ОК, это интересно. Мой вариант использования состоит в том, что у меня есть серия ссылок (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), которое снимает камею, а затем снимает остаток дня? Ну что ж, по крайней мере, теперь я знаю, какие события ожидать.

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

10 голосов
/ 03 ноября 2010

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

6 голосов
/ 07 мая 2009

Начиная с Android 1.5, те же события касания (начало | перемещение | конец | отмена), которые поддерживает iPhone, также работают и в Android.

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

...