Les deux doivent-ils référencer le même objet?
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
.
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.
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).
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:
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!')
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.
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
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
window.location est la plus fiable des deux, si l'on considère les anciens navigateurs.
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.
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
.
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é.
Eh bien oui, ils sont les mêmes, mais ....!
window.location
ne fonctionne pas sur certains navigateurs Internet Explorer.
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.
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