Mobile Safari が Web ページで Javascript の実行を一時停止することはよく知られています。
- 別のブラウザタブに切り替えます
- 別の 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の再アクティブ化は、同じトピックのこのディスカッションで説明されているように、ハートビート ループによって検出できます。