iOS Safari Mobile no activa el disparo de páginas solo una vez

El iOS Safari no parece desencadenar el evento pageshow en la siguiente situación.

Digamos que tengo 3 páginas

  • Página A: (tiene algún código de código en el evento pageshow)
  • Página B
  • Página c

El usuario navega desde A -> B Presiona el button de retroceso. (pageshow dispara bien)
El usuario luego navega a otra página puede ser la Página B o la Página C. Luego presiona nuevamente el button Atrás. (pageshow no se activa)

Por el contrario, si el usuario minimiza y maximiza la window de nuevo o cambia a otra window y retrocede (al presionar el button central del iPhone) se activará nuevamente el evento.

Todo parece funcionar bien en Android

 window.onpageshow = function(e) { alert('hello'); } 

¿Alguien más lo enfrentó? Pasé horas en esto y no pude pensar en una solución.

Cualquier ayuda sería muy apreciada.

Hack: Esto es lo que funcionó para mí

 var myCustomEvent = (navigator.userAgent.match('iPhone') != null) ? 'popstate' : 'pageshow'; $(window).on(myCustomEvent, function(e) { ... } 

Por alguna razón, popstate desencadena cada vez que el estado de la página cambia en iOS, pero no en Android.

Intente usar:

 window.onpageshow = function(event) { if (!event.persisted) { alert("hello"); } }; 

Persistido es falso en la carga de la página inicial, por lo que puede verificarlo, y si es falso, es la carga de la primera página.

El evento del popstate parece que ya no funciona, al less para mí. Elaboré un script de terceros en mi página que estaba rompiendo esto, pero no fue capaz de resolver cuál. Se me ocurrió este truco:

 addEventListener('pageshow', () => { history.replaceState({}, document.title, window.location.pathname); // called on initial load and first back }); addEventListener('popstate', () => { // called on all back events });