13

Mobile Safari が Web ページで 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>

iPad (iOS5 および iOS6 Preview3) では、アプリの切り替え時 (2.) にのみ発生し、タブの切り替え時 (1.) では発生しません。すべてのiPhoneは正常に動作します..

iPad ブラウザで差し迫ったタブ切り替えを検出できた人はいますか?

タブが再びアクティブになったときの Javascriptの再アクティブ化は、同じトピックのこのディスカッションで説明されているように、ハートビート ループによって検出できます。

4

4 に答える 4