37 votes

Bouton mobile De retour Safari

Le problème que j'ai trouvé est très similaire à cette question, sauf que Safari sur les ordinateurs de bureau semble avoir résolu le problème. Essentiellement, le problème est le suivant: lorsqu'un client est de la navigation sur le navigateur safari mobile et la page exécute une fonction javascript sur pagea.html, puis accédez à pageb.html, puis appuyez sur le bouton retour pour revenir à pagea.html, la fonction javascript ne fonctionne pas lorsque le client appuyé sur le bouton retour pour revenir à l'pagea.html. Il va sauter dans l'appel javascript.

J'ai essayé les solutions mentionnées dans le lien ci-dessus, mais rien ne semble fonctionner pour le navigateur Safari mobile. Quelqu'un d'autre a rencontré ce bug? Comment avez-vous gérer cela?

94voto

Mika Tuupola Points 5341

Ceci est causé par d'avant en arrière cache. Il est censé sauver l'état complet de la page lorsque l'utilisateur navigue à l'extérieur. Lorsque l'utilisateur navigue en arrière avec bouton retour à la page peuvent être chargés à partir du cache très rapidement. Ceci est différent de la normale cache uniquement les caches de code HTML.

Lorsque la page est chargée pour bfcache onload événement ne sera pas déclenché. Au lieu de cela vous pouvez vérifier l' persisted de la propriété de l' onpageshow événement. Il est défini sur false dans chargement initial de la page. Lorsque la page est chargée de bfcache elle est définie à true.

window.onpageshow = function(event) {
    if (event.persisted) {
        alert("From back / forward cache.");
    }
};

Pour une raison que jQuery n'a pas cette propriété dans l'événement. Vous pouvez le trouver à partir de l'original d'événement.

$(window).bind("pageshow", function(event) {
    if (event.originalEvent.persisted) {
      alert("From back / forward cache.");
    }
});

Solution rapide à ces problèmes est de recharger la page en arrière quand le bouton est pressé. Toutefois, cela annule tout effet positif arrière / avant du cache pourrait donner.

window.onpageshow = function(event) {
    if (event.persisted) {
        window.location.reload() 
    }
};

Au passage, vous pouvez voir beaucoup de pages offrant à l'aide de vide onunload gestionnaire comme solution. Cela n'a pas fonctionné depuis iOS5.

$(window).bind("unload", function() { });

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X