7

我有一系列打开弹出窗口的页面(Mobile Safari 中的新选项卡)。每个弹出窗口都需要知道它们何时成为焦点。在台式机上,我们使用window.onblurandwindow.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>

理论上,当您单击“单击我”时,您应该在新窗口出现时得到一个模糊事件。但这不会发生在 Mobile Safari 上。onpagehideonpageshow没有表现出爱,它们只会帮助检测您何时要关闭标签。

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

4

4 回答 4

6

试试这个:https ://gist.github.com/1122546

这是一个 Visibilty API polyfill。应该做的伎俩。

于 2012-06-24T17:39:43.543 回答
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);
于 2012-06-22T21:29:05.900 回答
2

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

当标签不活动时,ios 5暂停javascript

使用 Javascript 在 iPad 上处理待机

于 2012-06-21T07:35:02.377 回答
0

最近有人问了同样的问题,所以我将这个答案链接到我的旧答案

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

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

于 2013-02-04T13:48:01.023 回答