Differenza tra window.location.href, window.location.replace e window.location.assign


129

Qual è la differenza tra

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

Ho letto in molti forum che window.location.assign()sostituisce solo la cronologia della sessione corrente e quindi il pulsante Indietro del browser non funzionerà. Tuttavia, non sono in grado di riprodurlo.

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>

1
Si può vedere un posto più vecchio nella url: stackoverflow.com/questions/1865837/... Spero che sarà utile

Ecco una spiegazione migliore: stackoverflow.com/a/847130/96656
Mathias Bynens

Risposte:


165

Questi fanno la stessa cosa:

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

Passano semplicemente al nuovo URL. Il replacemetodo invece naviga all'URL senza aggiungere un nuovo record alla cronologia.

Quindi, quello che hai letto in quelle molte forme non è corretto. Il assignmetodo aggiunge un nuovo record alla cronologia.

Riferimento: http://developer.mozilla.org/en/window.location


1
Grazie mille per la risposta. Mi ha aiutato molto a risolvere il problema del pulsante Indietro del browser.
santosh kumar patro

@blunderboy: è comunque la risposta migliore per una frana, quindi non cambierebbe nulla.
BoltClock

Allora qual è il punto assign()? Da questa risposta e dai documenti, sembra identico a location = ....
Mitya

11

La parte relativa all'impossibilità di utilizzare il pulsante Indietro è un'interpretazione errata comune. window.location.replace (URL) elimina la prima voce UNO dall'elenco della cronologia della pagina, sovrascrivendola con la nuova voce, in modo che l'utente non possa tornare facilmente a quella particolare pagina Web. La funzione NON cancella l' intero elenco della cronologia delle pagine, né rende il pulsante Indietro completamente non funzionante.

(Funzione NO né combinazione di parametri che so di cambiamento lattina o voci di elenco di sovrascrittura della storia che si non si possiede assolutamente per alcuni - i browser generalmente impelement questa limitazione di sicurezza semplicemente nemmeno definire qualsiasi operazione che potrebbe a tutti influenzano una voce diversa da quello in alto nell'elenco della cronologia delle pagine. Mi vengono i brividi al pensiero di quali tipi di cose vili il malware potrebbe fare se esistesse una tale funzione.)

Se vuoi davvero rendere il pulsante Indietro non funzionante (probabilmente non "user friendly": ripensaci se è davvero quello che vuoi fare), "apri" una nuova finestra. (Puoi "aprire" un popup che nemmeno avere un pulsante "Indietro" troppo ... ma popup non sono molto popolari in questi giorni :-) Se si desidera mantenere la pagina che mostra, non importa ciò che l'utente fa ( ancora una volta la "facilità d'uso" è discutibile), imposta un gestore window.onunload che ricarica la tua pagina di nuovo in modo chiaro dall'inizio ogni volta.


4
'NESSUNA funzione né combinazione di parametri che conosco può modificare o sovrascrivere le voci dell'elenco della cronologia' ... Benvenuto in HTML5
SpYk3HH

6
L'impossibilità di modificare o sovrascrivere le voci della cronologia del browser che non possiedi è una regola di sicurezza che esiste da molto tempo. HTML5 continua semplicemente quella regola.
Chuck Kollars

Hai perso il punto o il sarcasmo piuttosto. Cerca html5 e cronologia
SpYk3HH
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.