Dois-je utiliser window.navigate ou document.location en JavaScript?

177

Quelle est la méthode préférée à utiliser pour modifier l'emplacement de la page Web actuelle à l'aide de JavaScript? J'ai vu à la fois window.navigate et document.location utilisés. Y a-t-il des différences de comportement? Existe-t-il des différences dans les implémentations de navigateur?

dthrasher
la source

Réponses:

220
window.location.href = 'URL';

est l'implémentation standard pour changer l'emplacement de la fenêtre actuelle.

James Skidmore
la source
22
Avez-vous une référence pour indiquer que window.location.href est l'implémentation standard? Et cette norme s'applique-t-elle également à tous les navigateurs? Vous semblez certainement bien informé et plus de 15 votes (plus la réponse acceptée) contribuent à le rendre plus fiable, même si je pense qu'il serait préférable de consulter la documentation des équipes de développement du navigateur pour étayer la revendication.
Goyuix
6
@Goyuix, il est probablement plus exact de dire que window.location.hrefc'est l'implémentation complète, mais window.locationaccomplit la même chose. Voir docs.sun.com/source/816-6408-10/location.htm : "Si vous affectez une chaîne à la locationpropriété d'un objet, JavaScript crée un locationobjet et attribue cette chaîne à sa hrefpropriété."
James Skidmore
3
On dirait que ces gars-là ont décidé de sa préférence personnelle: developer.mozilla.org/Talk:en/DOM/window.location . Ou voir l'exemple en bas, ils n'utilisent window.locationque mais cela n'indique pas nécessairement les deux: developer.mozilla.org/en/window.location .
James Skidmore
1
J'utilise actuellement ceci pour le développement Android. J'ai du mal à rediriger la page depuis JS dans le navigateur par défaut d'Androids. J'ai essayé window.location.href = 'URL';et aussi window.location.assign('URL');la méthode qui est conçue pour recharger une nouvelle page. Plus d'informations peuvent être trouvées w3schools.com/jsref/obj_location.asp
philipp
3
window.navigateest une méthode propriétaire, utilisée par Internet Explorer (je suis sûr que les autres navigateurs l'imitent pour la compatibilité, Chrome ne le fait pas). document.locationou window.locationsont des objets standards (voir les différentes spécifications HTML / HTML5 / DOM). document.location = someURL(ou window.location = someURL) est probablement pris en charge en raison du code hérité. La bonne façon de le faire est document.location.href = someURL, ou peut-être document.location.assign(someURL).
PhistucK
11

window.navigate n'est pas pris en charge dans certains navigateurs

Dans le script java, de nombreuses façons sont disponibles pour la redirection, voir le code et l'explication ci-dessous

window.location.href = "http://krishna.developerstips.com/";
window.location = "http://developerstips.com/";
window.location.replace("http://developerstips.com/");
window.location.assign("http://work.developerstips.com/");

window.location.href charge la page à partir du cache du navigateur et n'envoie pas toujours la requête au serveur. Donc, si vous avez une ancienne version de la page disponible dans le cache, elle y sera redirigée au lieu de charger une nouvelle page à partir du serveur.

window.location.assign () pour la redirection si vous souhaitez autoriser l'utilisateur à utiliser le bouton Précédent pour revenir au document d'origine.

window.location.replace () si vous souhaitez rediriger vers une nouvelle page et ne pas permettre à l'utilisateur de naviguer vers la page d'origine à l'aide du bouton retour.

Srikrushna
la source
7

document.locatio n est une propriété de chaîne en lecture seule (obsolète mais toujours présente), remplacée par document.url .

Kennebec
la source
6

window.location affecte également le cadre,

la meilleure forme que j'ai trouvée est:

parent.window.location.href

Et le pire est:

parent.document.URL 

J'ai fait un test de navigateur massif, et certains rares IE avec plusieurs plugins ne sont pas définis avec la deuxième forme.

jolmos
la source
Selon cette logique, top.window.location.href ne serait-il pas encore meilleur?
Orwellophile
6

window.locationaffectera la cible de votre navigateur. document.location n'affectera que votre navigateur et votre frame / iframe.

Aldry Zhen
la source
4

window.navigaten'est PAS pris en charge dans certains navigateurs, il faut donc l'éviter. Toutes les autres méthodes utilisant la propriété location sont l'approche la plus fiable et la plus cohérente

Troy Grosh
la source
2

J'irais avec window.location = "http://...";. Je codifie du JavaScript multi-navigateurs depuis quelques années et je n'ai jamais rencontré de problèmes avec cette approche.

window.navigateet window.location.hrefme semble un peu étrange.

cllpse
la source
13
window.location fonctionne, mais il est techniquement incorrect car "location" est un objet.
James Skidmore
16
Mais tout en JavaScript est un objet :)
cllpse
1
Bien que presque tout soit un objet en JavaScript, l'attribution d'une chaîne à un objet ne définit généralement pas la valeur de l'une de ses propriétés (comme window.location ou document.location le font avec leur propriété href), mais remplace à la place cet objet par un chaîne. Dans ce cas, une bizarrerie de navigateur a été ajoutée afin d'être compatible avec les implémentations existantes (excentriques) et le contenu hérité (et pas si hérité).
PhistucK
1

Il n'y a vraiment pas de différence; il existe environ 5 méthodes différentes pour le faire. Cependant, ceux que je vois le plus souvent sont document.locationet window.locationparce qu'ils sont pris en charge par tous les principaux navigateurs. (Personnellement, je n'ai jamais vu window.navigateutilisé dans le code de production, alors peut-être qu'il n'a pas un très bon support?)

Sasha Chedygov
la source
document.location ne fonctionne pas dans tous les navigateurs. window.location fait.
Philippe Leybaert
2
Firefox ne prend pas en charge window.navigate
Andrew Harry
-5

Vous pouvez déplacer votre page en utilisant

window.location.href =Url;
Vishnu Gupta
la source
3
Cela n'ajoute pas vraiment plus d'informations que la réponse acceptée et multiplie les votes positifs ...
Stuart Siegler
3
Vous pourriez même aller plus loin et affirmer que vous avez simplement plagié la réponse acceptée
Liam