Подтвердить что ты не робот

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

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

  • выберите
  • Наведите курсор мыши на
  • MouseDown
  • MouseUp
  • изменить

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

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

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

Спасибо!

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

4b9b3361

Ответ 1

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

Вот код, который я использовал для прикрепления событий, с результатами, которые нужно выполнить. Обратите внимание: я использую привязку событий "live", потому что для моего приложения теги 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

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

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

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

Ответ 2

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

Ответ 3

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

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