Les deux devraient-ils faire référence au même objet?
javascript
window.location
Morgan Cheng
la source
la source
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 quedocument.location
.Voir: http://www.w3.org/TR/html/browsers.html#dom-location
la source
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, adocument.location
été remplacé pardocument.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 toujourswindow.location
car c'est ce que j'ai utilisé depuis que j'ai écrit mon premier DHTML.la source
window.location
, n'est-il pas également valable d'utiliser simplementlocation
?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é parwindow
, qui se trouve être l'objet global. L'objet global est sous-entendu lorsqu'il est absent commewindow.
-location
est donc interprété comme telwindow.location
. Avertissements - fe généreraif(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).
la source
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, utilisezwindow.location
plutôt.Lire la suite:
document.location
window.location
la source
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.
la source
window.location
etdocument.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 quedocument.location
.Tous les navigateurs modernes correspondent
document.location
àwindow.location
, mais je préfère toujourswindow.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
retourstrue
, ce qui clarifie que les deux sont identiques.la source
document.location === window.location
Retourtrue
aussi
document.location.constructor === window.location.constructor
esttrue
Remarque: vient d'être testé sur, Firefox 3.6, Opera 10 et IE6
la source
===
et==
sont équivalents."abc" == new String("abc")
retournetrue
tout"abc" === new String("abc")
retournefalse
.==
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 Retourtrue
si x et y font référence au même objet. Sinon, revenezfalse
.document.location
etwindow.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()
, Thendocument.location==window.location
renverra true tandis quedocument.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:
la source
window.location est le plus fiable des deux, compte tenu des anciens navigateurs.
la source
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.
la source
Je dirais que
window.location
c'est le moyen le plus fiable d'obtenir l' URL actuelle . Voici la différence entre lewindow.location
etdocument.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
.la source
document.URL
- il s'agissait dewindow.location
etdocument.location
. N'existedocument.url
pas non plus = il doit être en majuscule.document.location.constructor === window.location.constructor
esttrue
.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é.
la source
Au moins dans IE, il y a une petite différence sur le fichier local:
document.URL renverra "file: // C: \ projects \ abc \ a.html"
mais window.location.href renverra "file: /// C: /projects/abc/a.html"
L'un est barre oblique inverse, l'autre est barre oblique.
la source
Eh bien oui, ce sont les mêmes, mais ....!
window.location
ne fonctionne pas sur certains navigateurs Internet Explorer.la source
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):
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:
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 cewindow.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.la source
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
la source