Unterschied zwischen window.location.href = window.location.href und window.location.reload ()

196

Was ist der Unterschied zwischen JavaScript

window.location.href = window.location.href

und

window.location.reload()

Funktionen?

Brian
quelle

Antworten:

247

Wenn ich mich richtig erinnere, window.location.reload()lädt die aktuelle Seite mit POST-Daten neu, während window.location.href=window.location.hrefdie POST-Daten nicht enthalten sind.

Wie von @ W3Max in den Kommentaren unten angegeben, window.location.href=window.location.hrefwird die Seite nicht neu geladen, wenn die URL einen Anker (#) enthält. window.location.reload()Dies müssen Sie in diesem Fall verwenden.

Wie von @Mic unten angegeben, window.location.reload()wird ein zusätzliches Argument verwendet, skipCachedamit bei Verwendung window.location.reload(true)des Browsers der Cache übersprungen und die Seite vom Server neu geladen wird. window.location.reload(false)wird das Gegenteil tun und die Seite wenn möglich aus dem Cache laden.

David Johnstone
quelle
11
Beachten Sie, dass der Browser Sie fragt, ob Sie die Daten erneut senden möchten, um die Seite neu zu laden, wenn Sie window.location.reload () in einem POST verwenden
15:27 Uhr
3
@Wimmel, gibt es eine Möglichkeit, diese Nachricht zu deaktivieren?
Kris-I
40
window.location.href = window.location.href lädt die Seite nicht neu, wenn die URL einen Anker (#) enthält. In diesem Fall müssen Sie window.location.reload () verwenden.
W3Max
5
Beachten Sie auch, dass location.reload () auch das Neuladen aller statischen Inhalte erzwingt (ähnlich wie bei einer harten Aktualisierung im Stil von Strg + F5), während das Zurücksetzen von location.href auf href (oder Pfadname oder URL) dies nicht tut, was von Bedeutung sein kann (und unnötiger) Unterschied in der Ladezeit auf einigen Seiten.
Rob Van Dam
2
@Wimmel Chrome: Lädt die Seite mit einem GET Firefox neu: Führt die vorherige Anforderung erneut aus. Wenn es sich also um einen POST handelt, wird ein nettes Popup angezeigt, in dem Sie gefragt werden, ob Sie die Daten erneut senden möchten oder nicht
Juri
51

Wenn Sie sagen, window.location.reload(true)der Browser überspringt den Cache und lädt die Seite vom Server neu. window.location.reload(false)wird das Gegenteil tun.

Hinweis: defaultWert für window.location.reload()istfalse

Mic
quelle
5
@Ismail - Der Standardwert ist false.
Trevor
2
Google Chrome 32, bei Verwendung von webRTC hat das Richtig / Falsch bei mir nicht funktioniert. Ich hatte einen Iframe mit webRTC und nur mit window.location.href = window.location.hrefhat den Trick gemacht.
Wenn Sie Änderungen an einem Formular auf der Seite vorgenommen haben, werden die Änderungen möglicherweise verschwinden (revert im Cache gespeicherte Werte) je nach Browser bei Verwendung location.reload()oder location.reload(false). Verwenden Sie, um eine vollständige Aktualisierung der Seite durchzuführen location.reload(true).
Suncat2000
32

Der Unterschied ist das

window.location = document.URL;

lädt die Seite nicht neu, wenn die URL einen Hash (#) enthält (mit oder ohne etwas danach)

window.location.reload();

lädt die Seite neu.

Fabien Ménager
quelle
2
Nicht alle Browser haben dieses Problem mit dem Beenden von Hashes. Wenn Sie Bedenken haben, Hashes zu beenden, versuchen Sie Folgendes: window.location = document.URL.replace (/ # $ /, '');
Walter Stabosz
1
Zumindest ist Chrome besorgt. Früher hielt ich es location.href = location.hreffür selbstverständlich, aber ich bemerkte gerade das genaue Verhalten und kam zu SO, um das Wort zu verbreiten. Verwenden Sie location.reload()stattdessen einfach .
Pioul
1
Sie können auch window.location.pathname verwenden, anstatt einen solchen regulären Ausdruck zu schreiben. Zum Beispiel:window.location.replace(window.location.pathname);
Arseny
20

Wenn Sie den booleschen Wert true zum Neuladen hinzufügen window.location.reload(true), wird er vom Server geladen.

Es ist nicht klar, wie unterstützt dieser Boolesche Wert ist. W3Org erwähnt, dass NS ihn unterstützt hat

Es könnte einen Unterschied zwischen dem Inhalt von window.location.href und document.URL geben - zumindest gab es früher einen Unterschied zwischen location.href und dem nicht standardmäßigen und veralteten document.location , der mit Umleitung zu tun hatte, aber das ist wirklich letztes Jahrtausend.

Zu Dokumentationszwecken würde ich window.location.reload () verwenden, da Sie dies tun möchten.

mplungjan
quelle
Schauen Sie sich stackoverflow.com/a/5091619/429972 an, da dies den Unterschied erklärt.
Jontro
14

Wie gesagt, das Ändern der href, wenn die URL einen Hash (#) enthält, würde die Seite nicht neu laden. Daher verwende ich dies, um es anstelle von regulären Ausdrücken neu zu laden:

if (!window.location.hash) {
    window.location.href = window.location.href;
} else {
    window.location.reload();
}
minterior
quelle
6

Als ich auf diese Frage stieß und ein abweichendes Verhalten im IE untersuchte, insbesondere im IE9, wurden ältere Versionen nicht überprüft. Es scheint

window.location.reload();

führt zu einer Aktualisierung, die den gesamten Bildschirm für eine Sekunde ausblendet, wobei as

 window.location = document.URL;

Aktualisiert die Seite viel schneller, fast unmerklich.

window.location.reload()Wenn Sie etwas mehr Nachforschungen anstellen und mit Fiddler experimentieren, wird der Cache anscheinend umgangen und vom Server neu geladen, unabhängig davon, ob Sie den Booleschen Wert damit übergeben oder nicht. Dazu gehört auch das Abrufen aller Ihrer Assets (Bilder, Skripte, Stylesheets, etc) wieder. Wenn Sie also nur möchten, dass die Seite den HTML-Code aktualisiert, window.location = document.URLwird die Seite viel schneller und mit weniger Verkehr zurückgegeben.

Ein Unterschied im Verhalten zwischen Browsern besteht darin, dass IE9 bei Verwendung der Reload-Methode die sichtbare Seite löscht und scheinbar von Grund auf neu erstellt, wobei FF und Chrome warten, bis sie die neuen Assets erhalten, und sie neu erstellen, wenn sie unterschiedlich sind.

invertedSpear
quelle
window.location = document.URL lädt die Seite genau wie window.location.reload () neu. Gibt es einen Stand der Technik zum Aktualisieren, ohne nach oben zu scrollen, oder unmerklich, wie Sie sagten?
bigmugcup
6

Ein Unterschied in Firefox (12.0) besteht darin, dass auf einer Seite, die aus einem POST gerendert wurde, reload () eine Warnung anzeigt und erneut veröffentlicht, während eine URL-Zuweisung ein GET ausführt.

Google Chrome führt für beide ein GET durch.

mrj
quelle
1
Chrome 38 scheint nun POST für .reload () zu verwenden.
Glen Little
3

Bei Verwendung von JSF tritt jetzt das Problem mit der Aktualisierung nach Ablauf der Sitzung auf: PrimeFaces ViewExpiredException nach dem erneuten Laden der Seite, und bei einigen Untersuchungen habe ich einen Unterschied in FireFox festgestellt:

Das Aufrufen window.location.reload()funktioniert wie das Klicken auf das Aktualisierungssymbol in FF. Es fügt die Zeile hinzu

Cache-Control max-age=0

Während die Einstellung window.location.hrefwie das Drücken der EINGABETASTE in der URL-Zeile funktioniert, wird diese Zeile nicht gesendet.

Obwohl beide als GET gesendet werden, stellt das erste (erneutes Laden) die vorherigen Daten wieder her und die Anwendung befindet sich in einem inkonsistenten Zustand.

Donau-Seemann
quelle
1

Nein, das sollte es nicht geben. Es ist jedoch möglich, dass es in einigen Browsern Unterschiede gibt, sodass entweder (oder keiner) in einigen Fällen nicht funktioniert.

Olli
quelle
1

Aus meiner Erfahrung von ca. 3 Jahren konnte ich keinen Unterschied feststellen ...

edit: ja, wie einer von ihnen hier gesagt hat, ist es der Unterschied, nur einen booleschen Parameter an window.location.reload () zu übergeben. Wenn Sie true übergeben , lädt der Browser eine neue Seite. Wenn false , wird die Cache-Version geladen ...

kumarharsh
quelle
0

In unserem Fall möchten wir die Seite nur in der Webansicht neu laden und aus bestimmten Gründen konnten wir nicht herausfinden, warum! Wir probieren fast jede Lösung aus, die im Web verfügbar war, aber ohne erneutes Laden mit location.reload () oder alternativen Lösungen wie window.location.reload (), location.reload (true), ...!

Hier ist unsere einfache Lösung:

Verwenden Sie einfach ein <a Tag mit dem leeren Attributionswert "href" wie folgt:

< a href="" ...>Click Me</a>

(In einigen Fällen müssen Sie beim Klicken auf das Ziel "return true" verwenden, um das Neuladen auszulösen.)

Weitere Informationen finden Sie in dieser Frage: Ist eine leere href gültig?

Metro Polisue
quelle
-3

window.location.href, dies hat mir in der Webansicht von Android 5.1 das Leben gerettet. Die Seite wird in dieser Version von Android nicht mit location.reload () neu geladen.

Rony Silva
quelle