Différence entre window.location.href, window.location.replace et window.location.assign

129

Quelle est la différence entre

  1. window.location.href="http://example.com";
  2. window.location.replace("http://example.com");
  3. window.location.assign("http://example.com");

J'ai lu dans de nombreux forums qui window.location.assign()remplace simplement l'historique de la session actuelle et, par conséquent, le bouton de retour du navigateur ne fonctionnera pas. Cependant, je ne suis pas en mesure de reproduire cela.

function fnSetVariable() {
    //window.location.href = "http://example.com";
    window.location.replace("http://example.com");
    //window.location.assign("http://example.com");
}

<a onmouseover="fnSetVariable();" 
   href="PageCachingByParam.aspx?id=12" >
   CLICK 
</a>
milan_9211
la source
1
Vous pouvez voir un post plus ancien dans l'url: stackoverflow.com/questions/1865837/ ... j'espère qu'il vous sera utile
Voici une meilleure explication: stackoverflow.com/a/847130/96656
Mathias Bynens

Réponses:

165

Ceux-ci font la même chose:

window.location.assign(url);
window.location = url;
window.location.href = url;

Ils naviguent simplement vers la nouvelle URL. La replaceméthode, d'autre part, navigue vers l'URL sans ajouter un nouvel enregistrement à l'historique.

Donc, ce que vous avez lu sous ces nombreuses formes n'est pas correct. La assignméthode ajoute un nouvel enregistrement à l'historique.

Référence: http://developer.mozilla.org/en/window.location

Guffa
la source
1
Merci beaucoup pour la réponse. Cela m'a beaucoup aidé à résoudre le problème du bouton de retour du navigateur.
santosh kumar patro
@blunderboy: C'est de toute façon la meilleure réponse à un glissement de terrain, donc cela ne changerait rien.
BoltClock
Alors, à quoi ça sert assign()? D'après cette réponse et les documents, cela semble identique à location = ....
Mitya
11

Le fait de ne pas pouvoir utiliser le bouton Retour est une mauvaise interprétation courante. window.location.replace (URL) jette la première entrée de la liste d'historique de page, en l'écrasant par la nouvelle entrée, de sorte que l'utilisateur ne puisse pas facilement retourner à cette page Web particulière. La fonction n'efface PAS la liste entière de l' historique de la page et ne rend pas le bouton Retour complètement inopérant.

(AUCUNE fonction ni combinaison de paramètres que je connais ne peut changer ou écraser les entrées de la liste d'historique que vous ne possédez pas absolument pour certains - les navigateurs impulsent généralement cette limitation de sécurité en ne définissant simplement aucune opération qui pourrait affecter une entrée autre que celui du haut de la liste de l'historique des pages. Je frémis à l'idée de ce que les logiciels malveillants pourraient faire si une telle fonction existait.)

Si vous voulez vraiment rendre le bouton Retour non fonctionnel (probablement pas "convivial": détrompez-vous si c'est vraiment ce que vous voulez faire), "ouvrez" une toute nouvelle fenêtre. (Vous pouvez « ouvrir » une fenêtre qui ne même pas avoir touche un « Retour » trop ... mais popups sont pas très populaires ces jours -ci :-) Si vous voulez garder votre page montrant peu importe ce que fait l'utilisateur ( encore une fois, la «convivialité» est discutable), mettez en place un gestionnaire window.onunload qui ne fait que recharger votre page à nouveau clairement dès le début à chaque fois.

Chuck Kollars
la source
4
'AUCUNE fonction ni combinaison de paramètres que je connais ne peut changer ou écraser les entrées de la liste d'historique' ... Bienvenue dans HTML5
SpYk3HH
6
L'incapacité de modifier ou d'écraser les entrées de l'historique du navigateur que vous ne possédez pas est une règle de sécurité qui existe depuis longtemps . HTML5 continue simplement cette règle.
Chuck Kollars
Vous avez plutôt manqué le point ou le sarcasme. Rechercher html5 et historique
SpYk3HH