События фокусировки и размытия окна не работают в браузере Android
Я обнаружил, что события фокуса и размытия в Javascript некорректно запускаются в браузере Android при подключении к окну, документу или телу.
Я написал простой тестовый скрипт, который корректно работает в настольных браузерах, но не работает в браузерах Android, Dolphin и Opera mobile:
<!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>
Интересно то, что если ввод формы получает фокус, обработчик события срабатывает, а при размытии обработчик события размытия срабатывает дважды.
У кого-нибудь есть хорошее решение или обходной путь для этого?
ОБНОВЛЕНИЕ: Ожидаемый результат будет, что, если я изменю вкладку браузера или переключусь на другое приложение, событие размытия должно сработать, и если я вернусь на вкладку браузера, событие фокусировки должно сработать (то, как это работает на рабочем столе)
Ответы
Ответ 1
Я только что проверил ваш код на галактике Nexus, работающей на желе (все, что у меня есть), и этот код работает отлично, и оба события срабатывают только один раз.
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>';
};
Возможно, вы нацелились на окно, которое на большинстве мобильных устройств обычно не может быть "размытым". Убедитесь, что вы прямо попросите элемент сообщить о своих собственных событиях размытия и фокусировки.
EDIT:
Кроме того, убедитесь, что вы ожидаете, что DOM будет готов, прежде чем применять прослушиватели событий.