Los events de página de inicio y de páginas no funcionan como se esperaba en ios chrome.

La documentation de Apple detalla los events del browser iOS disponibles aquí: https://developer.apple.com/library/safari/documentation/AppleApplications/Reference/SafariWebContent/HandlingEvents/HandlingEvents.html

los events 'pagehide' y 'pageshow' parecen funcionar bien en safari, pero en chrome solo funciona al cargar y download la página. No funciona en:

1) Al presionar el button de inicio, es decir, enviar cromo a background

2) Cambio de tabs

A continuación se muestra un pequeño fragment de código JavaScript que puede usar para verificarlo:

<script type="text/javascript"> window.addEventListener("pageshow", function(evt){ alert('show'); }, false); window.addEventListener("pagehide", function(evt){ alert('hide'); }, false); </script> 

¿Qué puedo hacer para detectar si chrome se envió a segundo plano o no? Necesito borrar un timer setTimeout tan pronto como se vuelva a poner Chrome en primer plano. ¿Alguna solución?

A continuación se muestra el código de trabajo:

 <script type="text/javascript"> var heartbeat; var lastInterval; function clearTimers() { clearTimeout(heartbeat); } function getTime() { return (new Date()).getTime(); } function intervalHeartbeat() { var now = getTime(); var diff = now - lastInterval - 200; lastInterval = now; if(diff > 1000) { // don't trigger on small stutters less than 1000ms clearTimers(); } } lastInterval = getTime(); heartbeat = setInterval(intervalHeartbeat, 200); 

Puede encontrar más detalles aquí: http://aawaara.com/post/74543339755/smallest-piece-of-code-thats-going-to-change-the-world

Pagehide y pageshow no son los events que necesitas para lo que estás tratando de lograr.

En su lugar, use el evento visibilitychange en combinación con document.hidden o document.visibilitystate , que debe hacer exactamente lo que desea.

Esto solo funcionará en browseres compatibles, que hasta ahora incluyen Chrome, pero no Safari (todavía). Por lo tanto, para estar seguro, llamaría a clearTimers() en visibilitychange y volvería a llamarlo en el pagehide de pagehide solo si document.visibilitystate no está definido.

Ver:

MDN: evento de cambio de visibilidad

MDN: uso de la API de visibilidad de página

Visibilidad de la página – Recomendación del W3C, octubre de 2013