события фокусировки и размытия окна не работают в браузере Android - PullRequest
10 голосов
/ 17 февраля 2012

Я обнаружил, что события фокуса и размытия 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 Ответ

0 голосов
/ 05 октября 2012

Я только что проверил ваш код на Galaxy 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>';
};​

Возможно, вы нацеливались на окнокоторый на большинстве мобильных устройств обычно не может быть «размытым» как таковой.Убедитесь, что вы непосредственно попросили элемент сообщить о своих собственных событиях размытия и фокуса.

РЕДАКТИРОВАТЬ: Кроме того, убедитесь, что вы ожидаете готовности DOM, прежде чем применять прослушиватели событий.

...