Unterschied zwischen window.location.href, window.location.replace und window.location.assign

126

Was ist der Unterschied zwischen

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

Ich habe in vielen Foren gelesen, dass window.location.assign()nur der aktuelle Sitzungsverlauf ersetzt wird und daher die Zurück-Schaltfläche des Browsers nicht funktioniert. Ich kann dies jedoch nicht reproduzieren.

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
quelle
1
Sie können einen älteren Beitrag in der URL sehen: stackoverflow.com/questions/1865837/… hoffe, es wird hilfreich sein
Hier ist eine bessere Erklärung: stackoverflow.com/a/847130/96656
Mathias Bynens

Antworten:

165

Diese machen das Gleiche:

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

Sie navigieren einfach zur neuen URL. Die replaceMethode navigiert dagegen zur URL, ohne dem Verlauf einen neuen Datensatz hinzuzufügen.

Was Sie in diesen vielen Formen gelesen haben, ist also nicht korrekt. Die assignMethode fügt dem Verlauf einen neuen Datensatz hinzu.

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

Guffa
quelle
1
Vielen Dank für die Antwort. Es hat mir sehr geholfen, das Problem mit den Zurück-Schaltflächen des Browsers zu beheben.
Santosh Kumar Patro 12.
@blunderboy: Es ist sowieso die beste Antwort von einem Erdrutsch, also würde das nichts ändern.
BoltClock
Worum geht es also assign()? Aus dieser Antwort und den Dokumenten geht hervor, dass es identisch ist mit location = ....
Mitya
11

Der Teil darüber, dass die Schaltfläche Zurück nicht verwendet werden kann, ist eine häufige Fehlinterpretation. window.location.replace (URL) löscht den obersten EINEN Eintrag aus der Seitenverlaufsliste, indem es ihn mit dem neuen Eintrag überschreibt, sodass der Benutzer nicht einfach zu dieser EINEN bestimmten Webseite zurückkehren kann. Die Funktion löscht NICHT die gesamte Seitenverlaufsliste und macht die Schaltfläche Zurück auch nicht funktionsunfähig.

(KEINE mir bekannte Funktion oder Kombination von Parametern kann Verlaufslisteneinträge ändern oder überschreiben, die Sie mit Sicherheit nicht unbedingt besitzen. Browser beeinträchtigen diese Sicherheitsbeschränkung im Allgemeinen, indem sie einfach nicht einmal einen Vorgang definieren, der sich auf einen anderen Eintrag als auswirken könnte das Spitze eine in der Seite History - Liste. ich schaudere bei dem Gedanken , was Malware Art von hinterhältigen Dinge tun könnte , wenn eine solche Funktion vorhanden war.)

Wenn Sie die Schaltfläche "Zurück" wirklich funktionsunfähig machen möchten (wahrscheinlich nicht "benutzerfreundlich": Überlegen Sie noch einmal, ob Sie das wirklich möchten), "öffnen" Sie ein brandneues Fenster. (Sie können ein Popup "öffnen", das nicht einmal über einen "Zurück" -Button verfügt ... aber Popups sind heutzutage nicht sehr beliebt :-) Wenn Sie möchten, dass Ihre Seite angezeigt wird, egal was der Benutzer tut ( Auch hier ist die "Benutzerfreundlichkeit" fraglich.) Richten Sie einen window.onunload-Handler ein, der Ihre Seite jedes Mal von Anfang an klar neu lädt.

Chuck Kollars
quelle
4
'KEINE Funktion oder Kombination von Parametern, die ich kenne, kann Verlaufslisteneinträge ändern oder überschreiben' ... Willkommen bei HTML5
SpYk3HH
6
Die Unfähigkeit, Browserverlaufseinträge, die Sie nicht besitzen, zu ändern oder zu überschreiben, ist eine Sicherheitsregel, die es schon lange gibt . HTML5 setzt diese Regel einfach fort.
Chuck Kollars
Sie haben den Punkt oder Sarkasmus eher verpasst. Schlagen Sie HTML5 und Geschichte
SpYk3HH