devez d'abord charger la page via AJAX et afficher manuellement:
url = '/api/html?profile=12345';
$.ajax({
url: url,
dataType: 'html'
}).always(function(response, status) {
if ('success' !== status) {
alert('Error loading page...');
return;
}
//store state for the back and refresh button handler
if (window.history) {
history.replaceState({
reloadUrl: location.href
}, '', location.href);
history.pushState({
reloadHtml: response
}, '', url);
} //if(window.history)
//render new page into current window
document.open('text/html','replace');
document.write(response);
document.close();
});
Pour faire le retour, avant et rafraîchir boutons fonctionnent, vous devez ajouter votre propre gestionnaire qui affichera ou recharger la page en fonction de l'état enregistré:
var allowPopState = false; //fixes popstate in Safari that fires it on every page load
$(function() { setTimeout('allowPopState = true;', 1); });
$(window).on('popstate', function(event) {
if (!history.state) { return; }
if (!allowPopState && document.readyState === 'complete') {
event.preventDefault();
event.stopImmediatePropagation();
return;
}
if (history.state.reloadHtml) {
document.open('text/html','replace');
document.write(history.state.reloadHtml);
document.close();
} else if (history.state.reloadUrl) {
if (history.state.reloadUrl === location.href) {
location.reload();
} else {
location.replace(history.state.reloadUrl);
}
}
});
Ceci ne conservera pas complètement l'animation mais minimisera le moment où le navigateur charge et restitue la nouvelle page et permet à l'animation de continuer pendant le chargement de la page. Pour le rendre encore meilleur, vous auriez besoin de mettre en cache toutes les ressources pour la page suivante ou utiliser le chargement paresseux sur la page suivante.
Bug connu: dans Firefox de bureau, ce réinitialisera zoom page (CTRL + +/- ou faire défiler CTRL +). par exemple. Lorsque vous zoomez sur la page actuelle à 200%, la page suivante sera affichée en zoom 100%.
est le navigateur qui tente d'effacer l'ancien et de charger le nouveau contenu sur l'onglet. semble hors de préoccupations de javascript. – Sharky
Il est provoqué par le navigateur - il s'anime pendant le chargement de la page à partir du serveur, mais arrête l'animation une fois l'analyse terminée. Si c'est une grande page, ce sera visible. –