Javascript 在Mobile Safari中检测是否移动到新选项卡

Javascript 在Mobile Safari中检测是否移动到新选项卡,javascript,iphone,ios,ipad,mobile-safari,Javascript,Iphone,Ios,Ipad,Mobile Safari,我有一系列打开弹出窗口(Mobile Safari中的新选项卡)的页面。每个弹出窗口都需要知道它们何时是焦点。在桌面上,我们使用window.onblur和window.onfocus来驱动这种行为。然而,这些活动在iPad上都不起作用。我还尝试了window.onpageshow和window.onpagehide,它们似乎也没有在正确的时间启动。我有一个测试HTML文件: <html> <head> <script language="javascript"&g

我有一系列打开弹出窗口(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>

log('Hello');
window.onblur=函数(e){console.log('blur');};
window.onfocus=函数(e){console.log('focus');};
window.onpagehide=函数(e){console.log('pagehide');};
window.onpageshow=函数(e){console.log('pageshow');};
理论上,当您单击“单击我”时,当新窗口出现时,您应该会得到一个模糊事件。但这不会发生在移动Safari上
onpagehide
onpageshow
也不显示爱,它们只在您即将关闭选项卡时帮助检测


我怎样才能在Mobile Safari中获得我想要的行为?有可能吗?

iOS 5暂停JS在“无活动”选项卡中。 也许这个话题可以帮助你


我认为无法检测到
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);
试试这个:


这是一个可视的API polyfill。应该这样做。

最近有人问了同样的问题,所以我将把这个答案与我以前的答案链接起来

Mageek的方法与我正在做的非常相似,但也会在滚动事件或键盘可见时触发。防止滚动时的行为并不是非常具有挑战性,但我从未抽出时间查看屏幕上的键盘事件


“我的对象”还利用requestAnimationFrame,并将使用focus hack作为备用,在可用的情况下选择使用可见性API(理想情况下,使其成为未来的证明)。

谢谢,这看起来就像是一张罚单!实际上,根据克里斯·基尔的评论,这在移动Safari中可能不起作用。我现在没有带我的iPad——如果他说的是真的,那么移动Safari有什么解决办法吗?这只会在你回到账单上时告诉你,对吗?我想知道什么时候带有此代码的选项卡不再出现在屏幕上,并在重新打开选项卡之前知道它。