window.onfocus在IE7中没有触发,在Opera中不一致

Ed *_*iel 6 javascript opera internet-explorer javascript-events onfocus

请注意,这与窗口上的焦点和模糊事件有关,而与窗体字段无关.

我正在弹出窗口中加载文档,它包含以下代码:

<script type="text/javascript">
window.onblur = function(){ document.title="BLURRED"; }
window.onfocus= function(){ document.title="FOCUSED"; }
</script>
Run Code Online (Sandbox Code Playgroud)

这些功能是暂时的,用于测试.我希望使用这些事件来设置一个指示窗口状态的标志; 我正在做一个聊天应用程序,如果消息在最小化时进入,我会做一些注意力的标题更改.但是,当窗口获得焦点时,如果它们没有取消,那么它们就会很烦人.

Onload,我也把重点放在textarea上.(不确定这是否有所不同.)

IE7(我没有其他版本方便)似乎认识到window.onblur但不是window.onfocus.Opera 10简直太奇怪了.

这是我所拥有的浏览器中发生的事情.我通过单击父级中的链接启动弹出窗口,然后通过单击(Windows XP)任务栏上的弹出按钮来完成几个最小化还原周期:

Safari 4:

  • 打开窗口:文档以原始标题打开
  • 最小化:标题更改为"BLURRED"
  • 恢复:标题更改为"FOCUSED"

这就是我预期会发生的事情.

Firefox 3.5:

  • 打开窗口:文档以原始标题打开,然后更改为"FOCUSED"
  • 最小化:标题更改为"BLURRED"
  • 恢复:标题更改为"FOCUSED"

onfocus onload有点令人惊讶,但不是问题.

IE7:

  • 打开窗口:文档以原始标题打开
  • 最小化:标题更改为"BLURRED"
  • 恢复:无论我切换多少次,标题都不会改变

onfocus发生了什么?

Opera 10.5

  • 打开窗口:文档以原始标题打开,但在另一个选项卡中,不弹出

有时...

  • 最小化:标题更改为"BLURRED"
  • 恢复:标题更改为"FOCUSED"

有时...

  • 最小化:标题更改为"BLURRED"然后"FOCUSED"
  • 恢复:标题不会改变

好的,这简直就是奇怪......

我对其他方法开放态度,但我真的很想知道这里发生了什么,用普通的旧Javascript - 所以请不要给出一个jQuery的答案,除非真的没有办法解决这个问题.

谢谢!

And*_*y E 6

onfocusonblur在IE中的窗口对象上有错误.另一种方法是使用传播的onfocusinonfocusout事件:

function focusin() { document.title="BLURRED"; }
function focusout() { document.title="FOCUSED"; }

if ("onfocusin" in document)
    document.onfocusin = focusin,
    document.onfocusout = focusout;
else
    window.onblur = focousout,
    window.onfocus= focusin;
Run Code Online (Sandbox Code Playgroud)

我在这里为你树立了榜样.

的focusIn事件的内容,不像焦点模糊,被传播的事件; 他们将触发页面中的元素并向上冒泡.如果您不想对页面上的所有元素执行此事件,则需要检查event.srcElementevent.target.

至于Opera,"奇怪"是你可以使用的一个词.我的机器上的版本不会为我启动窗口上的模糊或焦点事件.希望其他人可以为您提供解决方案.