J'utilise ce type de ligne dans une réponse JS
if (history && history.pushState){
history.pushState(null, null, '<%=j home_path %>');
}
mais lorsque je clique sur back
dans le navigateur, le code JS de la réponse est affiché à la place de la page précédente.
Existe-t-il un moyen de faire fonctionner le bouton Précédent de manière à ce qu'il demande à nouveau la page de la dernière URL (avant home_path
comme pushStated dans?)?
Mise à jour :
J'ai trouvé ceci .. il semble que d'autres aient le même problème avec .. History.js ne le répare pas
Donc, pour confirmer certains des commentaires là-bas .. Cela se produit uniquement en chrome
Ce que je pense
Je pense que la racine de tout cela est que le popstate demande le même type de document pushstate (réponse js). Ce qui doit être fait est sur demande popstate la réponse HTML .. Je ne sais pas comment
Plus de mises à jour:
voir http://railscasts.com/episodes/246-ajax-history-state il mentionne utiliser
$(window).bind("popstate", function() {
$.getScript(location.href);
});
cela résout le problème mais selon comprendre jQuery $ .getScript () sans ajax le cache y ajoutera des horodatages .. qui polluent l’url .. le désactiver le fait ne plus fonctionner avec le même effet ..
Quelqu'un sait comment résoudre ce problème?
Encore plus de mises à jour
J'ai suivi les traces du problème tout au long de l'interweb et j'ai terminé avec un problème en chrome qui pointe vers un problème avec Rails (Firefox fonctionne cependant) et un problème avec dans Rails-ujs concernant l'inclusion de Vary Header dans les réponses
Exemple peut être trouvé ici
Je joue actuellement avec faire
response.headers['Vary'] = 'Accept'
qui semble résoudre le problème, à première vue.
Si quelqu'un a le même problème, s'il vous plaît vérifier et faites le moi savoir
Vous devez ajouter un auditeur à l'événement popstate
window.onpopstate = function(event) {
//load the page
};
Lorsque le bouton Précédent est enfoncé, l'URL est modifiée, puis l'événement Popstate est déclenché. Il est de votre responsabilité de charger dans votre écouteur Popstate les détails correspondant à l'URL modifiée.
Certains navigateurs déclenchent un événement popstate lors du premier chargement de la page, ce qui provoque une boucle de chargement de page infinie. Ceci peut être évité en ajoutant le contrôle suivant
var loadPage = window.history.state;
window.onpopstate = function(event) {
if (loadPage)
//load the page
};
Puis définissez la loadPage sur true lorsque pushState est appelé
history.pushState(null, null, '<%=j home_path %>');
loadPage = true;
Cette technique fonctionne dans tous les navigateurs qui prennent en charge l’application Historique HTML 5.
C'est arrivé avec sinatra et chrome.
Résolu avec:
$.ajaxSetup({ cache: false });
J'ai testé ce code sur mon navigateur en utilisant un fichier HTML local et j'ai eu une erreur de sécurité de la console:
SecurityError: The operation is insecure.
history.pushState(null, null, '<%=j home_path %>');
Je peux voir à quel point la manipulation de l'historique du navigateur peut être considérée comme un comportement potentiellement dangereux. Par conséquent, vous devriez vérifier que cela ne se produit pas pour vous également. Essayez d’utiliser la console Javascript Firebug. Il est également possible qu'il existe des différences de comportement entre les fichiers locaux et http: // HTML.
Cela dit, pour ce que j'ai vu, le dernier élément du tableau history
est fondamentalement la page en cours, donc si vous voulez changer le précédent, vous pouvez le faire en utilisant deux commandes pushState () - vous devez d'abord appuyer sur l'élément précédent que vous désirez, alors vous repoussez le chemin actuel. Si j'ai bien compris votre problème.