El enfoque de la ventana y los eventos de desenfoque no funcionan correctamente en el navegador de Android
Descubrí que los eventos de foco y desenfoque de JavaScript no se disparan correctamente en el navegador de Android, cuando se adjunta a ventana, documento o cuerpo.
I worte un script de prueba simple que funciona correctamente en los navegadores de escritorio, pero falla en Android navegador de valores, Dolphin y Opera móvil:
- Ejecución de javascript en segundo plano mediante el teléfono
- Androide WebView: manejar las teclas de flecha en JavaScript
- JavaScript: Seguimiento de la selección de cambios en Firefox para Android
- ¿Qué es una solución alternativa para Chrome para el comportamiento incorrecto de clientX y clientY de Android?
- Pinch zoom in, zoom out - javascript / jquery / jquery eventos móviles para la web en la plataforma android?
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0" /> <title>Focus test</title> <script type="text/javascript"> window.onfocus = function() { document.getElementById('console').innerHTML += '<div>Focus event handler fired.</div>'; }; window.onblur = function() { document.getElementById('console').innerHTML += '<div>Blur event handler fired.</div>'; }; </script> </head> <body> <input id="test" name="test" /> <div id="console"></div> </body> </html>
Intresting es que si la entrada de formulario está recibiendo el foco, el manejador de eventos se dispara y, al desenfocar, el controlador de eventos de desenfoque se dispara dos veces.
¿Alguien tiene una buena solución o una solución para esto?
EDIT: El resultado esperado sería que si cambia una pestaña del navegador o cambia a otra aplicación, el evento de desenfoque se disparará y si vuelvo a la pestaña del navegador, el evento de enfoque debería dispararse (así funciona en el escritorio )
- Cómo recuperar el valor de la función de script java en el componente de vista web
- Touchend no disparar después de touchmove en android 4.x?
- JQuery - Android - El evento 'Keyup' no funciona en retroceso en Chrome
- Swipeleft / swiperight activado durante el desplazamiento vertical en jQuery móvil
- Detectar si actualmente se desplaza una página web en Android
Acabo de probar tu código en un Galaxy Nexus corriendo jellybean (todo lo que tengo) y este código funciona perfecto, y ambos eventos sólo se disparan una vez cada uno.
document.getElementById('test').onfocus = function() { document.getElementById('console').innerHTML += '<div>Focus event handler fired.</div>'; }; document.getElementById('test').onblur = function() { document.getElementById('console').innerHTML += '<div>Blur event handler fired.</div>'; };
Podría ser que estuviera apuntando a la ventana, que en la mayoría de los dispositivos móviles, normalmente no puede ser "borrosa" per se. Asegúrese de pedir directamente al elemento que informe de su propio desenfoque y los eventos de enfoque.
EDIT: Además, asegúrese de que está esperando que el DOM esté listo antes de aplicar los oyentes de eventos.