Différence entre window.location.href = window.location.href et window.location.reload ()


196

Quelle est la différence entre JavaScript

window.location.href = window.location.href

et

window.location.reload()

les fonctions?

Réponses:


247

Si je me souviens bien, window.location.reload()recharge la page actuelle avec les données POST, tandis que window.location.href=window.location.hrefn'inclut pas les données POST.

Comme indiqué par @ W3Max dans les commentaires ci-dessous, window.location.href=window.location.hrefne rechargera pas la page s'il y a une ancre (#) dans l'URL - Vous devez utiliserwindow.location.reload() dans ce cas.

En outre, comme indiqué par @Mic ci-dessous, window.location.reload()prend un argument supplémentaire skipCacheafin que l'utilisation window.location.reload(true)du navigateur ignore le cache et recharge la page à partir du serveur. window.location.reload(false)fera le contraire et chargera la page depuis le cache si possible.


11
notez que lorsque vous utilisez window.location.reload () sur un POST, le navigateur vous demandera si vous souhaitez renvoyer les données pour recharger la page
wimh

3
@Wimmel, existe-t-il un moyen de désactiver ce message?
Kris-I

40
window.location.href = window.location.href ne rechargera pas la page s'il y a une ancre (#) dans l'URL - Vous devez utiliser window.location.reload () dans ce cas.
W3Max

5
Notez également que location.reload () forcera également le rechargement de tout le contenu statique (un peu comme une actualisation matérielle de style ctrl + f5), contrairement à la définition de location.href sur href (ou chemin d'accès ou URL), ce qui pourrait être significatif (et inutile) différence de temps de chargement sur certaines pages.
Rob Van Dam

2
@Wimmel Chrome: recharge la page avec un GET Firefox: réexécute la demande précédente, ce qui signifie que si c'était un POST, vous obtiendrez la belle fenêtre vous demandant si vous devez renvoyer les données ou non
Juri

51

Si vous dites que window.location.reload(true)le navigateur sautera le cache et rechargera la page depuis le serveur.window.location.reload(false)fera le contraire.

Remarque: la defaultvaleur de window.location.reload()estfalse


5
@Ismail - La valeur par défaut est false.
Trevor

2
Google Chrome 32, lors de l'utilisation de webRTC, le vrai / faux n'a pas fonctionné pour moi. J'ai eu un iframe avec webRTC et seule l'utilisation a window.location.href = window.location.hreffait l'affaire.

Si vous avez apporté des modifications à un formulaire sur la page, les modifications peuvent disparaître (revenir aux valeurs mises en cache) selon le navigateur lors de l'utilisation de location.reload()ou location.reload(false). Pour effectuer une actualisation complète de la page, utilisez location.reload(true).
Suncat2000

32

La différence est que

window.location = document.URL;

ne rechargera pas la page s'il y a un hachage (#) dans l'URL (avec ou sans quelque chose après), alors que

window.location.reload();

rechargera la page.


2
Tous les navigateurs n'ont pas ce problème avec la fin des hases. Si la fin des hachages vous préoccupe, essayez: window.location = document.URL.replace (/ # $ /, '');
Walter Stabosz

1
Au moins Chrome est concerné. Je tenais location.href = location.hrefpour acquis, mais je viens de remarquer ce comportement exact et je suis venu à SO pour passer le mot. Utilisez simplement à la location.reload()place.
Pioul

1
Vous pouvez également utiliser window.location.pathname au lieu d'écrire une telle expression régulière. Par exemple:window.location.replace(window.location.pathname);
Arseny

20

Si vous ajoutez le booléen true au rechargement window.location.reload(true) il se chargera depuis le serveur.

Il n'est pas clair à quel point ce booléen est pris en charge, W3Org mentionne que NS avait l' habitude de prendre en charge ce

Il pourrait y avoir une différence entre le contenu de window.location.href et document.URL - il au moins utilisé pour être une différence entre location.href et la non-standard et désapprouvée document.location qui devait faire avec redirection, mais est vraiment le dernier millénaire.

À des fins de documentation, j'utiliserais window.location.reload () parce que c'est ce que vous voulez faire.


Regardez stackoverflow.com/a/5091619/429972 car cela explique la différence.
jontro

14

Comme dit, la modification du href lorsqu'il y a un hachage (#) dans l'url ne rechargerait pas la page. Ainsi, je l'utilise pour le recharger au lieu d'expressions régulières:

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

6

Je suis tombé sur cette question en recherchant un comportement aberrant dans IE, en particulier IE9, n'a pas vérifié les anciennes versions. Il semble

window.location.reload();

entraîne une actualisation qui vide tout l'écran pendant une seconde, alors que

 window.location = document.URL;

rafraîchit la page beaucoup plus rapidement, presque imperceptiblement.

En faisant un peu plus de recherche et quelques expérimentations avec fiddler, il semble que window.location.reload()cela contournera le cache et se rechargera à partir du serveur, que vous passiez ou non le booléen avec, cela inclut l'obtention de tous vos actifs (images, scripts, feuilles de style, etc) à nouveau. Donc, si vous souhaitez simplement que la page actualise le code HTML, le window.location = document.URLretourne beaucoup plus rapidement et avec moins de trafic.

Une différence de comportement entre les navigateurs est que lorsque IE9 utilise la méthode de rechargement, il efface la page visible et la reconstruit apparemment à partir de zéro, où FF et chrome attendent jusqu'à ce qu'ils obtiennent les nouveaux actifs et les reconstruisent s'ils sont différents.


window.location = document.URL recharge la page comme window.location.reload (). Existe-t-il un état de l'art pour rafraîchir sans faire défiler vers le haut, ou imperceptiblement comme vous l'avez dit?
bigmugcup

6

Une différence dans Firefox (12.0) est que sur une page rendue à partir d'un POST, reload () affichera un avertissement et fera une nouvelle publication, tandis qu'une affectation d'URL fera un GET.

Google Chrome fait un GET pour les deux.


1
Chrome 38 semble désormais utiliser POST pour .reload ().
Glen Little

3

En utilisant JSF, j'ai maintenant le problème de l'actualisation après expiration de la session: PrimeFaces ViewExpiredException après le rechargement de la page et avec une enquête, j'ai trouvé une différence dans FireFox:

L'appel window.location.reload()fonctionne comme cliquer sur l'icône d'actualisation sur FF, il ajoute la ligne

Cache-Control max-age=0

pendant le réglage window.location.href fonctionne comme appuyer sur ENTER dans la ligne URL, il n'envoie pas cette ligne.

Bien que les deux soient envoyés en tant que GET, le premier (rechargement) restaure les données précédentes et l'application est dans un état incohérent.


1

Non, il ne devrait pas y en avoir. Cependant, il est possible qu'il existe des différences dans certains navigateurs, de sorte que l'un (ou l'autre) peut ne pas fonctionner dans certains cas.


1

d'après mon expérience d'environ 3 ans, je n'ai trouvé aucune différence ...

edit: oui, comme l'un d'eux l'a dit ici, ne passer qu'un paramètre booléen à window.location.reload () est la différence. si vous passez vrai , le navigateur charge une nouvelle page, mais si faux , la version du cache est chargée ...


0

Dans notre cas, nous voulons simplement recharger la page en affichage Web et pour certaines raisons, nous n'avons pas pu savoir pourquoi! Nous essayons presque toutes les solutions qui ont été sur le Web, mais bloquées sans rechargement en utilisant location.reload () ou des solutions alternatives comme window.location.reload (), location.reload (true), ...!

Voici notre solution simple:

Utilisez simplement une balise <a> avec la valeur d'attribution "href" vide comme ceci:

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

(dans certains cas, vous devez utiliser "return true" au clic de la cible pour déclencher le rechargement)

Pour plus d'informations, consultez cette question: un href vide est-il valide?


-3

window.location.href, cela m'a sauvé la vie dans la vue Web d'Android 5.1. La page ne se recharge pas avec location.reload () dans cette version d'Android.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.