web-dev-qa-db-fra.com

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

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 que window.location.assign() ne remplace que l'historique de la session en cours et que le bouton Précédent du navigateur ne fonctionnera donc pas. Cependant, je ne suis pas capable de reproduire ceci.

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>
103
milan_9211

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 méthode replace, quant à elle, permet d'accéder à l'URL sans ajouter de nouvel enregistrement à l'historique.

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

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

146
Guffa

La partie sur le fait de ne pas pouvoir utiliser le bouton Précédent est une interprétation erronée courante. window.location.replace (URL) supprime l'entrée en haut ONE de la liste d'historique des pages en la remplaçant par la nouvelle entrée, de sorte que l'utilisateur ne peut pas facilement revenir à cette page Web. La fonction n'efface PAS la liste d'historique de pages entière, elle ne rend pas non plus le bouton Précédent complètement non fonctionnel.

(AUCUNE fonction ni combinaison de paramètres que je connais ne peuvent modifier ou écraser les entrées de la liste de l'historique que vous ne possédez pas absolument pour certains - les navigateurs appliquent généralement cette limitation de sécurité en ne définissant tout simplement pas d'opération susceptible de n'affecte absolument aucune entrée autre que en haut dans la liste d'historique des pages. Je frémis à l'idée de ce que les malwares pourraient faire si une telle fonction existait.)

Si vous voulez vraiment rendre le bouton Précédent non fonctionnel (probablement pas "convivial": repensez si c'est vraiment ce que vous voulez faire), "ouvrez" une nouvelle fenêtre. (Vous pouvez "ouvrir" un popup qui n'a même pas avoir un bouton "Retour" aussi ... mais les popups ne sont pas très populaires de nos jours :-) Si vous voulez que votre page reste visible peu importe ce que fait l'utilisateur (encore une fois, la "convivialité" est discutable), configurez un gestionnaire window.onunload qui recharge simplement votre page à chaque fois.

10
Chuck Kollars