我一直在使用它,虽然我直到最近才意识到它在ie8中运行不正常。
$(window).blur(function () {
alert("lost");
});
在firefox或chrome或safari中,这会在窗口失去焦点时正确显示警报。但是,在IE8中,警报似乎被置于某种队列中。警报“丢失”仅显示窗口重新获得焦点的时间。更令人困惑的是,当与追踪窗口获得焦点的事件相结合时,它们就会出现故障。
$(window).focus(function () {
alert("gained");
});
(不要在chrome或firefox中尝试这个,因为警报会进入某种循环)
如果这两个都与IE8一起使用,当窗口失去焦点,然后重新获得它时,IE8警告“获得”ok
“丢失”。这个无序事件触发导致我的代码问题,因为它是向后的,并报告最后一个事件是浏览器失去焦点。
如何在IE8中跟踪此内容?
答案 0 :(得分:4)
方法的荣誉:https://stackoverflow.com/a/10999831/1026459
解决我的情况:
document.onfocusout = function(){
alert("lost");
};
这实际上控制了一个间隔,但这是除了这一点。 onfocusout
适用于ie8, chrome,safari和ff 。我不确定ie8与blur
有什么问题,但我正在逐步淘汰它。
修改强>
不幸的是,document.onfocusout在chrome或safari中不起作用,所以我不得不做更多的解决方法。这就是我最终的目标。
//ie workaround
document.onfocusout = function(e){
if( e === undefined ){//ie
var evt = event;//ie uses event
if( evt.toElement == null ){//check where focus was lost to
console.log("lost");
}
}
};
window.onblur = function(e){
if( e !== undefined ){//ie will have an undefined e here, so this screens them out
console.log("lost");
}
};
$(window).focus(function () {
console.log("gained");
});
答案 1 :(得分:1)
在IE8中复制之后,我测试了Mathias Bynens的页面可见性是否有效,它似乎可以解决您的问题。您可以在此处下载:http://mths.be/visibility。
我确实改变了你的测试代码以避免进入警报循环;
$(document).on({
'show.visibility': function () {
$(document.body).append(new Date().getTime() + '<br/>');
},
'hide.visibility': function () {
$(document.body).append(new Date().getTime() + '<br/>');
}
});
还要注意,这与$(window).blur()
和$(window).focus()
的行为略有不同,而不是在用户点击窗口元素外时激活,在大多数浏览器中(除了IE之外)这只会当用户无法再看到窗口时激活(例如,切换选项卡,或最小化浏览器,但在更改为其他应用程序或监视器时不会)。我个人赞成这种行为,因为我不想让网站改变,而我仍在观看它,但与不同的应用程序进行交互。