众所周知,Mobile Safari会暂停在网页上执行Javascript
您可以订阅该窗口的“pagehide”和“pageshow”事件,以检测即将暂停和重新激活Javascript。
问题是,在 iPad 移动版Safari上标签切换(1.)时,这些事件不会触发。在 iPhone 移动版Safari上,一切都正常,如上所述。
证明这一点很简单:
<!DOCTYPE html>
<html>
<head>
<script>
window.addEventListener("pagehide", function(evt){
var logger = document.getElementById('log_id');
logger.innerText = logger.innerText + " pagehide fired!";
}, false);
</script>
</head>
<body>
<div id="log_id"></div>
</body>
</html>
仅在进行应用程序切换(2.)而不是切换选项卡(1.)时才会在iPad(iOS5和iOS6 Preview3)上触发。所有iPhone都可以正常工作..
有没有人能够在iPad浏览器上检测到即将发生的标签切换?
当this discussion of the same topic中描述的心跳循环可以检测到再次激活标签时Javascript的重新激活。
答案 0 :(得分:1)
尝试检查文档上的焦点和模糊。
为什么需要Page Visibility API?
答案 1 :(得分:1)
Apple在 iOS7 中修正。 (刚试过iPad模拟器)
答案 2 :(得分:0)
我同意Pinal:使用焦点/模糊!但我建议不要在文件上,而是在窗口上。 只需注册一个监听器并在那里做你的东西。
如http://caniuse.com/#feat=pagevisibility所述,您要使用的功能未得到很好的实施。 (编辑:刚刚在一个迷你测试用例中测试过 - 它可以在iOS 5/6上运行 - 尽管caniuse.com断言不同)
如果您尝试使用计时器,可以尝试使用requestAnimationFrame替代setInterval。