9
votes

Obtenez la valeur hachée qui était avant HashChange

Supposons que mon code HTML soit xxx

et js est xxx

Je veux obtenir la valeur hachage qui était avant le changement de hachage. cela possible? Si oui, comment?


1 commentaires

4 Réponses :


13
votes

Utilisez que

$(window).on("hashchange", function(e){
    console.log(e.originalEvent.oldURL)
    console.log(e.originalEvent.newURL)
})​;


3 commentaires

Quel navigateur et système d'exploitation utilisez-vous


Mozilla Firefox et OS Windows 7 et vous ne devriez pas demander cela parce que je veux une réponse compatible avec navigateur croisée


Ceci est indéfini sur IE 11.



9
votes

Vous devez suivre le dernier hachage, par exemple: xxx


1 commentaires

Cela ne semble pas fonctionner sous IE9 Event.fragment est également indéfini. A dû le remplacer par emplacement.hash.replace (/ ^ # /, '')



2
votes

En réalité, la solution fournie par AMIT fonctionne, mais avec une bibliothèque JQuery et une plate-forme crossplate.

Voici une solution plus simplifiée à l'aide de Core JavaScript et Crossbrower. (Vérifié avec la dernière version de IE / FF / CHROME / SAFARI) P>

window.onhashchange = function(e){
  console.log(e);
  var oldURL = e.oldURL; 
  var newURL = e.newURL; 
  console.log("old url = " + oldURL);
  console.log("new url = " + newURL);
  var oldHash = oldURL.split("#")[1];
  var newHash = newURL.split("#")[1];
  console.log(oldHash);
  console.log(newHash);
};


5 commentaires

Comme indiqué ci-dessus, cela fonctionne sur la dernière version de (IE / FF / CHROME / SAFARI). Les codes sont bien testés et travaillent pour moi sur tous les quatre navigateurs indiqués. Je ne sais pas si FF12 est la dernière version du navigateur. Quand j'ai testé, ma version FF était FF20.0.

Vous pouvez vérifier la valeur de E (effectuée en deuxième ligne) et découvrez les variables OLDURL et NEWURL (E.OLDURL et E.NEWURL) si elles existent ou non. Bonne chance.


Je voulais dire FF19 sur Linux. Quoi qu'il en soit, j'utilise window.location.hash qui semble être beaucoup plus fiable.


Terminez les points non liés que vous avez faits. fenêtre.location.hash et window.onhashchange sont pour deux objectifs différents. window.location.hash vous donne simplement votre index de hachage mais window.onhashchange déclenche si l'index de hachage est modifié. Et la solution ci-dessus vous aide à savoir quel indice actuel est et quel est l'index passé avant que votre hachage soit modifié. Essayez de comprendre le scénario d'abord mon garçon. Toute façon heureuse de savoir que votre problème est résolu.


Cette solution ne semble pas fonctionner dans IE10. Sortie est [Objet Object] Old URL = Nouvelle URL non définie = Script indéfini5007: impossible d'obtenir la propriété 'division' de référence non définie ou nulle


Oui peut-être que vous avez raison. La solution travaillait au moment où je l'ai écrite et l'a testée sur la dernière version au moment de la rédaction.



1
votes

N'utilisez pas

(function(w, $){
  var UrlHashMonitor = {};
  UrlHashMonitor.oldHash = '';
  UrlHashMonitor.newHash = '';
  UrlHashMonitor.oldHref = '';
  UrlHashMonitor.newHref = '';
  UrlHashMonitor.onHashChange = function(f){
    $(window).on('hashchange', function(e){
      UrlHashMonitor.oldHash = UrlHashMonitor.newHash;
      UrlHashMonitor.newHash = w.location.hash;
      UrlHashMonitor.oldHref = UrlHashMonitor.newHref;
      UrlHashMonitor.newHref = w.location.href;
      f(e);
    });
  };
  UrlHashMonitor.init = function(){
    UrlHashMonitor.oldHash = UrlHashMonitor.newHash =   w.location.hash;
    UrlHashMonitor.oldHref = UrlHashMonitor.newHref = w.location.href;
  };
  w.UrlHashMonitor = UrlHashMonitor;
  return UrlHashMonitor;

})(window, window.jQuery);

/*
 * USAGE EXAMPLE
 */
UrlHashMonitor.init();
UrlHashMonitor.onHashChange(function(){
  console.log('oldHash: ' + UrlHashMonitor.oldHash);
  console.log('newHash: ' + UrlHashMonitor.newHash);
  console.log('oldHref: ' + UrlHashMonitor.oldHref);
  console.log('newHref: ' + UrlHashMonitor.newHref);
  //do other stuff
});


0 commentaires