Какие события DOM доступны WebKit на Android?
-
19-08-2019 - |
Вопрос
Я создаю мобильное веб-приложение, ориентированное на пользователей Android.Мне нужно знать, какие события DOM доступны для меня.Я смог выполнить следующую работу, но не очень надежно:
- щелчок
- наведение курсора мыши
- наведение курсора мыши
- наведение курсора мыши
- изменение
Мне не удалось заставить работать следующее:
- нажатие клавиши
- нажатие клавиши
- ввод ключа
Кто-нибудь знает полный список того, что поддерживается и в каких контекстах (например, доступен ли onchange только для формирования входных данных?)?Я не могу найти ссылку на это в Google.
Спасибо!
Обновить: Спросил я тот же вопрос в списке разработчиков Android.Я проведу еще несколько тестов и опубликую свои результаты как здесь, так и там.
Решение
Ладно, это интересно.Мой вариант использования заключается в том, что у меня есть ряд ссылок (A
теги) на экране в представлении WebKit.Чтобы проверить, какая область событий доступна, используя jQuery 1.3.1, я прикрепил каждое событие, указанное на эта страница (даже те, которые не имеют смысла) к ссылкам, затем использовали элементы управления up, down и enter в эмуляторе 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
После выбора элемента при нажатии кнопки "enter" запускаются следующие события (по порядку):
mousemove
,mousedown
,DOMFocusOut
,mouseup
,click
,DOMActivate
Это поражает меня как куча случайного мусора.И кто это дерзкое мероприятие, предназначенное только для IE (mouseenter
) снимаешь камео, а потом берешь отгул на остаток дня?Ну что ж, по крайней мере, теперь я знаю, за какими событиями следует следить.
Было бы здорово, если бы другие захотели взять мой тестовый код и выполнить более тщательный прогон, возможно, используя элементы формы, изображения и т.д.
Другие советы
Поскольку это второй по популярности пост Android + JavaScript на SO (который является просто печальным комментарием о состоянии веб-разработки, ориентированной на платформу Android), я подумал, что, возможно, стоит включить ссылку на результаты тестирования pkk touch event на http://www.quirksmode.org/mobile/tableTouch.html а также http://www.quirksmode.org/mobile/ в общем.
Начиная с Android 1.5, те же события касания (запуск | перемещение | завершение | отмена), которые поддерживает iPhone, работают и в Android.
Одна проблема, которую я обнаружил, заключалась в том, что конечные точки touchmove попадают в очередь.Обходного пути пока нет.