Les deux devraient-ils faire référence au même objet?
Les deux devraient-ils faire référence au même objet?
Réponses:
Selon le W3C, ce sont les mêmes. En réalité, pour la sécurité entre navigateurs, vous devriez utiliser window.location
plutôt que document.location
.
window.location
) sans fournir de justification. Si vous ne fournissez pas de justification, pourquoi devrait-on suivre votre avis? La réponse de Christoph est beaucoup plus utile à cet égard.
La manière canonique d'obtenir l'objet de localisation actuel est window.location
(voir cette page MSDN de 1996 et le brouillon W3C de 2006 ).
Comparez cela à 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, a document.location
été remplacé par document.URL
(voir ici sur MSDN ), qui fait également partie du DOM niveau 1 .
Pour autant que je sache, tous les navigateurs modernes correspondent 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
, n'est-il pas également valable d'utiliser simplement location
?
window
objet. Ainsi, toute variable ou fonction que vous définissez au niveau supérieur de votre script est une propriété de l'objet référencé par window
, qui se trouve être l'objet global. L'objet global est sous-entendu lorsqu'il est absent comme window.
- location
est donc interprété comme tel window.location
. Avertissements - fe générera if(an_undefined_variable)
une erreur si la variable n'a pas été définie - if(window.an_undefined_variable)
pas.
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 Gecko (Firefox, SeaMonkey).
document.location
est en lecture seule dans IE. Je peux lui attribuer avec succès dans IE 10, 9, 8 et 6 (en utilisant des machines virtuelles de modern.ie ).
console.log(location);
? !!
document.location
était à l'origine une propriété en lecture seule, bien que les navigateurs Gecko vous permettent également de lui attribuer. Pour la sécurité entre les navigateurs, utilisez window.location
plutôt.
Lire la suite:
Fait intéressant, si vous avez un cadre, une image ou un formulaire nommé «emplacement», alors «document.location» fournit 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 de nom de 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!')
window.location
et document.location
ne peut pas être occulté dans Chrome ou Firefox.
Pour autant que je sache, les deux sont identiques. Pour plus de sécurité, vous pouvez utiliser window.location
plutôt que document.location
.
Tous les navigateurs modernes correspondent 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 ma première page Web. c'est plus cohérent.
vous pouvez également voir les document.location === window.location
retours true
, ce qui clarifie que les deux sont identiques.
document.location === window.location
Retour true
aussi
document.location.constructor === window.location.constructor
est true
Remarque: vient d'être testé sur, Firefox 3.6, Opera 10 et IE6
===
et ==
sont équivalents.
"abc" == new String("abc")
retourne true
tout "abc" === new String("abc")
retourne false
.
==
et ===
sont équivalents. Voir les sections de spécifications 11.9.3 et 11.9.6. Pour les valeurs non nulles, non indéfinies, non numériques, non booléennes et non chaîne de même type, le ==
comportement est régi par 11.9.3 partie 1f et le ===
comportement par 11.9.6 partie 7, qui lisent de manière identique Retour true
si x et y font référence au même objet. Sinon, revenez false
.
document.location
et window.location
pointent vers des objets. Il vous manque tout le point des triples égaux; utiliser 2 égaux ne prouve pas qu'ils sont les mêmes obj. Nous devons utiliser 3 égaux et non 2 égaux car 2 égaux nous donneront un faux positif. Sur un navigateur dans lequel document.location est une chaîne d'URL égale à window.location.toString()
, Then document.location==window.location
renverra true tandis que document.location===window.location
renverra false.
document.location === window.location
comparaison. Le fait que la .constructor
comparaison soit intégrée signifie aussi, je pense, que cette réponse est toujours valable, mais son utilisation ===
simplifierait le raisonnement.
Oui, ils sont pareils. C'est l'une des nombreuses bizarreries historiques de l'API JS du navigateur. Essayez de faire:
window.location === document.location
Il est rare de voir la différence de nos jours car le html 5 ne prend plus en charge les framesets. Mais à l'époque où nous avons le frameset, document.location ne redirigeait que le cadre dans lequel le code est exécuté, et window.location redirigeait la page entière.
Je dirais que window.location
c'est le moyen le plus fiable d'obtenir l' URL actuelle . Voici la différence entre le window.location
et document.url
celui qui est apparu dans l'un des scénarios où j'ajoutais des paramètres de hachage dans l'URL et le lisais plus tard.
Après avoir ajouté des 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 quand je l'ai utilisé, window.location
j'ai pu obtenir les paramètres de hachage à partir de l'URL.
Il est donc toujours préférable de l'utiliser window.location
.
document.URL
- il s'agissait de window.location
et document.location
. N'existe document.url
pas non plus = il doit être en majuscule.
document.location.constructor === window.location.constructor
est true
.
C'est parce que c'est exactement le même objet que vous pouvez voir document.location===window.location
.
Il n'est donc pas nécessaire de comparer le constructeur ou toute autre propriété.
Eh bien oui, ce sont les mêmes, mais ....!
window.location
ne fonctionne pas sur certains navigateurs Internet Explorer.
Malgré ce que la plupart des gens recommandent ici, voici à quoi ressemblait le protocole dynamique de Google Analytics pour les âges (avant de passer récemment de ga.js à analytics.js):
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
Plus d'informations: https://developers.google.com/analytics/devguides/collection/gajs/
Dans la nouvelle version, ils ont utilisé '//' pour que le navigateur puisse ajouter automatiquement le protocole:
'//www.google-analytics.com/analytics.js'
Donc, si Google préfère document.location au window.location
moment où ils ont besoin d'un protocole dans JS, je suppose qu'ils ont des raisons à cela.
GLOBAL : Personnellement, je le crois document.location
et ce window.location
sont les mêmes, mais si c'est le géant avec les plus grandes statistiques sur l'utilisation de navigateurs comme Google utilisant document.location , je recommande de les suivre.
En fait, je remarque une différence de chrome entre les deux. Par exemple, si vous souhaitez naviguer vers un cadre en bac à sable à partir d'un cadre enfant, vous pouvez le faire uniquement avec document.location mais pas avec window.location