在iPad上运行时,Mobile Safari中即将进行的选项卡切换的Pagehide事件不会触发

Sem*_*mel 13 javascript mobile-safari dom-events ios

众所周知,Mobile Safari会暂停在网页上执行Javascript

  1. 切换到其他浏览器选项卡
  2. 切换到不同的iOS应用程序(例如,当您接到来电的手机应用程序时)

您可以订阅窗口的"pagehide""pageshow"事件,以检测Javascript即将暂停和重新激活.

问题是,在iPad Mobile Safari 上切换选项卡(1.)时,这些事件不会触发.在iPhone Mobile 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>
Run Code Online (Sandbox Code Playgroud)

只有在进行应用程序切换(2.)而不是切换选项卡(1.)时才会在iPad(iOS5和iOS6 Preview3)上触发.所有iPhone工作正常..

有没有人能够在iPad浏览器上检测到即将发生的标签切换?

当标签再次变为活动时,Javascript 的重新激活可以通过心跳循环来检测,如同对该主题的讨论中所描述的.

Pin*_*nal 1

尝试检查文档的焦点和模糊情况。

为什么需要页面可见性 API?

  1. 您可以使用存储事件来表示其他页面谁处于活动状态。
  2. 您可以使用计时器(setInterval)来检查距离上次计时器触发的时间。如果它比预期大-页面被隐藏,因为大多数浏览器停止计时器然后页面被隐藏。