我有一系列打开弹出窗口的页面(Mobile Safari中的新标签。)这些弹出窗口中的每一个都需要知道它们何时成为焦点。在桌面设备上,我们使用window.onblur
和window.onfocus
来推动此行为。但是,这些事件都不适用于iPad。我也尝试了window.onpageshow
和window.onpagehide
,它们似乎也没有在正确的时间点火。我有一个测试HTML文件:
<html>
<head>
<script language="javascript">
console.log('Hello');
window.onblur = function(e) { console.log('blur'); };
window.onfocus = function(e) { console.log('focus'); };
window.onpagehide = function(e) { console.log('pagehide'); };
window.onpageshow = function(e) { console.log('pageshow'); };
</script>
</head>
<body>
<a href="http://www.google.com" target="_blank">Click Me</a>
</body>
</html>
理论上,当您点击“Click Me”时,您应该在新窗口出现时出现模糊事件。但这不会发生在Mobile Safari上。 onpagehide
和onpageshow
也不显示爱情,它们只会帮助您检测何时关闭标签。
如何在Mobile Safari中获取我正在寻找的行为?它有可能吗?
答案 0 :(得分:6)
试试这个:https://gist.github.com/1122546
这是一个Visibility API polyfill。应该做的伎俩。
答案 1 :(得分:4)
我认为无法检测onblur
,但这是一个检测onfocus
的代码:
var timestamp=new Date().getTime();
function checkResume()
{
var current=new Date().getTime();
if(current-timestamp>5000)
{
var event=document.createEvent("Events");
event.initEvent("focus",true,true);
document.dispatchEvent(event);
}
timestamp=current;
}
window.setInterval(checkResume,50);
然后你写下:
document.addEventListener("focus",function()
{
alert("Focus detected");
},false);
答案 2 :(得分:2)
iOS 5在没有活动标签的情况下暂停JS。 也许这个话题可以帮到你。
答案 3 :(得分:0)
最近有人问了同样的事情所以我只是将这个答案链接到我的旧答案here。
Mageek的方法与我正在做的非常相似,但也会在滚动事件或键盘可见时触发。在滚动时防止这种行为并不是非常具有挑战性,但我从来没有去寻找屏幕键盘事件。
我的对象还利用了requestAnimationFrame,并且仅将焦点hack用作后备,选择在可用时使用Visibility API(理想情况下使其面向未来)。