web-dev-qa-db-fra.com

Quelle est la différence entre window.location et document.location en JavaScript?

Les deux doivent-ils référencer le même objet?

214
Morgan Cheng

Selon le W3C, ce sont les mêmes. En réalité, pour des raisons de sécurité sur tous les navigateurs, vous devez utiliser window.location plutôt que document.location.

Voir: http://www.w3.org/TR/html/browsers.html#dom-location

192
rahul

Le moyen canonique d’obtenir l’objet d’emplacement actuel est window.location (voir cette page MSDN de 1996 et le brouillon du W3C de 2006 ).

Comparez ceci à document.location qui, à l'origine, ne renvoyait que l'URL actuelle sous forme de chaîne (voir cette page sur MSDN ). Probablement pour éviter toute confusion, document.location a été remplacé par document.URL (voir ici sur MSDN ), qui fait également partie de DOM niveau 1 .

Autant que je sache, tous les navigateurs modernes mappent document.location à window.location, mais je préfère toujours window.location car c'est ce que j'ai utilisé depuis que j'ai écrit mon premier DHTML.

199
Christoph

window.location est en lecture/écriture sur tous les navigateurs compatibles.

document.location est en lecture seule dans Internet Explorer (au moins), mais en lecture/écriture dans les navigateurs basés sur Gecko (Firefox, SeaMonkey).

91
Frédéric Hamidi

document.location était à l'origine une propriété en lecture seule, bien que les navigateurs Gecko vous permettent également de l'affecter. Pour la sécurité entre les navigateurs, utilisez window.location à la place.

Lire la suite: 

document.location

window.location

43
diEcho

Il est intéressant de noter que si vous avez un cadre, une image ou un formulaire nommé "emplacement", "document.location" fournit alors une référence à la fenêtre, à l'image ou au formulaire du cadre, respectivement, au lieu de l'objet Location. Apparemment, cela est dû au fait que la recherche du nom de la collection document.forms, document.images et window.frames est prioritaire sur le mappage vers window.location.

<img name='location' src='location.png'>

if (document.location.tagName == 'IMG') alert('Hello!')
34
Phil Hamer

Autant que je sache, les deux sont identiques. Pour plus de sécurité sur tous les navigateurs, vous pouvez utiliser window.location plutôt que document.location.

Tous les navigateurs modernes mappent document.location à window.location, mais je préfère quand même window.location, comme je l’utilise depuis la première page Web. c'est plus cohérent.

vous pouvez également voir que document.location === window.location renvoie true, ce qui précise que les deux sont identiques.

27
AlphaMale

document.location === window.location renvoie true

également

document.location.constructor === window.location.constructor est true

Remarque: juste testé sur Firefox 3.6, Opera 10 et IE6

13
YOU

Oui, ils sont pareils. C'est l'une des nombreuses particularités historiques de l'API JS du navigateur. Essayez de faire:

window.location === document.location
10
Matthew Flaschen

window.location est la plus fiable des deux, si l'on considère les anciens navigateurs.

8
Dave Ward

Il est rare de voir la différence de nos jours car HTML 5 ne prend plus en charge les cadres. Mais à l'époque où nous avions un jeu de cadres, document.location ne redirigerait que le cadre dans lequel le code serait exécuté et window.location redirigerait toute la page.

2
Marquinho Peli

Je dirais que window.location est le moyen le plus fiable d’obtenir le courant URL . Voici la différence entre le window.location et le document.url apparaissant dans l'un des scénarios dans lesquels j'ajoutais des paramètres de hachage à l'URL et que je lisais plus tard.

Après avoir ajouté les paramètres de hachage dans l'URL.

Dans un navigateur plus ancien, je ne pouvais pas obtenir les paramètres de hachage à partir de l'URL en utilisant document.url, mais lorsque j'ai utilisé window.location, j'ai pu obtenir les paramètres de hachage à partir de l'URL.

Il est donc toujours préférable d'utiliser window.location.

2
azhar_salati

document.location.constructor === window.location.constructor est true.

C'est parce que c'est exactement le même objet que vous pouvez voir à partir de document.location===window.location.

Il n'est donc pas nécessaire de comparer le constructeur ou toute autre propriété.

2
Gene Karasev

Eh bien oui, ils sont les mêmes, mais ....!

window.location ne fonctionne pas sur certains navigateurs Internet Explorer.

2
divHelper11

Au moins dans IE, il y a une petite différence sur le fichier local:

document.URL retournera "fichier: // C:\projets\abc\a.html"

mais window.location.href retournera "fichier: /// C: /projects/abc/a.html"

On est slash en arrière, on est slash en avant.

2
Justin

En fait, je remarque une différence de chrome entre les deux. Par exemple, si vous souhaitez naviguer vers un cadre en sandbox à partir d'un cadre enfant, vous pouvez le faire uniquement avec document.location mais pas avec window.location

0
M.Abulsoud