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.locationplutô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.locationcar 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?
windowobjet. 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.- locationest 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.locationest 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.locationplutô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.locationet document.locationne 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.locationplutôt que document.location.
Tous les navigateurs modernes correspondent document.locationà window.location, mais je préfère toujours window.locationcar 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.locationretours 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 truetout "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 truesi x et y font référence au même objet. Sinon, revenez false.
document.locationet window.locationpointent 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.locationrenverra true tandis que document.location===window.locationrenverra false.
document.location === window.locationcomparaison. Le fait que la .constructorcomparaison 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.locationc'est le moyen le plus fiable d'obtenir l' URL actuelle . Voici la différence entre le window.locationet document.urlcelui 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.locationj'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.locationet document.location. N'existe document.urlpas non plus = il doit être en majuscule.
document.location.constructor === window.location.constructorest 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.locationmoment où ils ont besoin d'un protocole dans JS, je suppose qu'ils ont des raisons à cela.
GLOBAL : Personnellement, je le crois document.locationet ce window.locationsont 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