窗口焦点和模糊事件在Android浏览器上无法正常工作

ist*_*men 12 javascript android onfocus onblur dom-events

我发现当连接到窗口,文档或正文时,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>
Run Code Online (Sandbox Code Playgroud)

有趣的是,如果表单输入正在获得焦点,则事件处理程序将触发,并且在模糊时,模糊事件处理程序将触发两次.

有没有人有一个很好的解决方案或解决方法?

编辑:预期的结果是,如果我更改浏览器选项卡,或更改为另一个应用程序,模糊事件应该触发,如果我回到浏览器选项卡,焦点事件应该触发(这是它在桌面上的工作原理) )

Kyl*_*gyi 0

我刚刚在运行 jellybean 的 Galaxy Nexus 上测试了您的代码(我拥有的一切),该代码运行完美,并且两个事件仅触发一次。

\n\n
document.getElementById(\'test\').onfocus = function() {\n    document.getElementById(\'console\').innerHTML += \'<div>Focus event handler fired.</div>\';\n};\ndocument.getElementById(\'test\').onblur = function() {\n    document.getElementById(\'console\').innerHTML += \'<div>Blur event handler fired.</div>\';\n};\xe2\x80\x8b\n
Run Code Online (Sandbox Code Playgroud)\n\n

可能是您的目标是窗口,在大多数移动设备上,窗口本身通常不能“模糊”。确保直接要求元素报告其自身的模糊和焦点事件。

\n\n

编辑: \n此外,请确保在应用事件侦听器之前等待 DOM 准备就绪。

\n

  • 我知道它适用于文档元素,但我特别想在窗口元素上使用。预期的结果是,如果我更改浏览器选项卡或更改为另一个应用程序,则应触发模糊事件,如果我返回浏览器选项卡,则应触发焦点事件(这就是它在桌面上的工作方式) (3认同)