Das Pagehide-Ereignis beim bevorstehenden Tab-Wechsel in Mobile Safari wird nicht ausgelöst, wenn es auf dem iPad ausgeführt wird
Es ist bekannt, dass Mobile Safari die Ausführung von Javascript auf einer Webseite pausiert, wenn
Sie wechseln zu einer anderen Browser-Registerkartezu einer anderen iOS-App wechseln (z. B. wenn Sie einen eingehenden Anruf erhalten, die Telefon-App)Sie können die Fenster abonnieren"pagehide" und"pageshow" Ereignisse zur Erkennung einer bevorstehenden Suspendierung und Reaktivierung von Javascript.
Das Problem ist, dass diese Ereignisse nicht ausgelöst werden, wennTab-Switching (1.) auf einemiPad Mobile Safari. Auf einemiPhone Mobile Safari ist allesfein, genau wie oben beschrieben.
Es ist trivial zu demonstrieren:
<!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>
Es wird auf iPads (iOS5 und iOS6 Preview3) nur beim Wechseln zwischen Apps (2.) und nicht beim Wechseln zwischen Tabs (1.) ausgelöst. Alle iPhones funktionieren einwandfrei.
War jemand in der Lage, einen bevorstehenden Tab-Wechsel im iPad-Browser zu erkennen?
DasReaktivierung von Javascript, wenn der Tab wieder aktiv wird, kann durch eine Herzschlagschleife wie in beschrieben erkannt werdendiese Diskussion des gleichen Themas.