检测移动到Mobile Safari中的新选项卡

时间:2012-06-18 14:53:19

标签: javascript iphone ios ipad mobile-safari

我有一系列打开弹出窗口的页面(Mobile Safari中的新标签。)这些弹出窗口中的每一个都需要知道它们何时成为焦点。在桌面设备上,我们使用window.onblurwindow.onfocus来推动此行为。但是,这些事件都不适用于iPad。我也尝试了window.onpageshowwindow.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上。 onpagehideonpageshow也不显示爱情,它们只会帮助您检测何时关闭标签。

如何在Mobile Safari中获取我正在寻找的行为?它有可能吗?

4 个答案:

答案 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。 也许这个话题可以帮到你。

ios 5 pauses javascript when tab is not active

Handling standby on iPad using Javascript

答案 3 :(得分:0)

最近有人问了同样的事情所以我只是将这个答案链接到我的旧答案here

Mageek的方法与我正在做的非常相似,但也会在滚动事件或键盘可见时触发。在滚动时防止这种行为并不是非常具有挑战性,但我从来没有去寻找屏幕键盘事件。

我的对象还利用了requestAnimationFrame,并且仅将焦点hack用作后备,选择在可用时使用Visibility API(理想情况下使其面向未来)。