Jakie zdarzenia DOM są dostępne dla WebKit na Androida?

Buduję mobilną aplikację internetową skierowaną do użytkowników Androida. Muszę wiedzieć, jakie wydarzenia DOM są dostępne dla mnie. Udało mi się wykonać następujące prace, ale niezbyt rzetelnie:

  • Kliknij
  • mouseover
  • mousedown
  • mouseup
  • Zmień

Nie udało mi się uruchomić:

  • klawiatura
  • keydown
  • keyup

Czy ktoś zna pełną listę tego co jest obsługiwane i w czym konteksty (np. czy onchange jest dostępne tylko do tworzenia wejść?)? Nie mogę znaleźć odniesienia do tego w Googlach.

Dzięki!

Update: zadałem to samo pytanie na liście programistów Androida. Będę robić więcej testów i opublikuję moje wyniki zarówno tu, jak i tam.

Author: John, 2009-01-24

3 answers

OK, to jest interesujące. Mój przypadek użycia polega na tym, że mam serię linków (A tagi) na ekranie w widoku WebKit. Aby sprawdzić, jaki obszar zdarzeń jest dostępny, używając jQuery 1.3.1, dołączałem każde zdarzenie wymienione na tej stronie (nawet te, które nie mają sensu) do linków, a następnie użyłem kontrolek góra, dół i enter na emulatorze Androida i zauważyłem, które zdarzenia wywołane w jakich okolicznościach.

Oto kod, którego użyłem do załączenia wydarzeń, z wynikami do naśladowania. Uwaga, używam powiązanie zdarzeń "live", ponieważ dla mojej aplikacji znaczniki A są wstawiane dynamicznie.

$.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);
    });
});

Oto Jak to się potoczyło:

  • Przy pierwszym załadowaniu strony bez podświetlenia (brak brzydkiego pomarańczowego pola wyboru wokół dowolnego elementu), za pomocą przycisku w dół, aby wybrać pierwszy element, wywołane są następujące zdarzenia (w kolejności): mouseover, mouseenter, mousemove, DOMFocusIn

  • Po wybraniu elementu, przechodząc do następnego elementu za pomocą przycisku w dół, wywołane są następujące zdarzenia (w kolejności): mouseout, mouseover, mousemove, DOMFocusOut, DOMFocusIn

  • Po wybraniu elementu, klikając przycisk "enter", wywołane są następujące zdarzenia (w kolejności): mousemove, mousedown, DOMFocusOut, mouseup, click, DOMActivate

To wydaje mi się kupą przypadkowych śmieci. A kim jest ten bezczelny IE-only event (mouseenter) robiący cameo, a potem robiący sobie wolne do końca dnia? No cóż, przynajmniej teraz wiem na co patrzeć.

Byłoby wspaniale, gdyby inni chcieli wziąć mój kod testowy i zrobić dokładniejszy przebieg, być może za pomocą elementów formularza, obrazów itp.

 20
Author: Andrew Hedges,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-24 21:51:28

Ponieważ jest to drugi najpopularniejszy wpis na Androida + JavaScript NA SO (który jest tylko smutnym komentarzem na temat stanu tworzenia stron internetowych ukierunkowanych na platformę Android), pomyślałem, że warto zamieścić link do wyników testu pkk touch event na http://www.quirksmode.org/mobile/tableTouch.html a także http://www.quirksmode.org/mobile / ogólnie.

 9
Author: Oskar Austegard,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-03 15:39:05

Począwszy od Androida 1.5, te same zdarzenia dotykowe(start|move|end|cancel), które obsługuje iPhone, działają również w Androidzie.

Jeden problem znalazłem było to, że touchmove kończy się w kolejce. Nie ma jeszcze obejścia.

 5
Author: Roman Nurik,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-24 18:41:59