web-dev-qa-db-fra.com

Différence entre window.location.href et top.location.href

Quelqu'un peut-il me dire la différence entre window.location.href et top.location.href?

Et aussi où utiliser lequel.

Et lequel sera le meilleur lors de la redirection après un appel ajax dans MVC?

86
Egalitarian

window.location.href Renvoie l'emplacement de la page en cours.

top.location.href (Qui est un alias de window.top.location.href) Renvoie l'emplacement de la fenêtre la plus haute dans la hiérarchie des fenêtres. Si une fenêtre n'a pas de parent, top est une référence à elle-même (en d'autres termes, window === window.top).

top est utile à la fois lorsque vous utilisez des cadres et des fenêtres ouvertes par d'autres pages. Par exemple, si vous avez une page appelée test.html Avec le script suivant:

var newWin=window.open('about:blank','test','width=100,height=100');
newWin.document.write('<script>alert(top.location.href);</script>');

L'alerte résultante aura le chemin complet vers test.html - not about: blank, qui est ce que window.location.href Renverrait.

Pour répondre à votre question sur la redirection, utilisez window.location.assign(url);

118
josh3736

top L'objet a plus de sens dans les cadres. À l'intérieur d'un cadre, window fait référence à la fenêtre du cadre actuel, tandis que top correspond à la fenêtre la plus externe contenant le (s) cadre (s). Alors:

window.location.href = 'somepage.html'; _ signifie chargement somepage.html à l'intérieur du cadre.

top.location.href = 'somepage.html'; _ signifie chargement somepage.html dans la fenêtre principale du navigateur.

Deux autres objets intéressants sont self et parent .

24
Salman A

top fait référence à l'objet window qui contient toutes les images actuelles (père du reste des fenêtres). window est le window actuel.

http://www.howtocreate.co.uk/tutorials/javascript/browserinspecific

alors top.location.href peut contenir le lien de page "maître" contenant tous les cadres, tandis que window.location.href contient uniquement le lien de la page "actuelle".

9
meder omuraliev

Le premier ajoute un élément à votre historique en ce sens que vous pouvez (ou devriez pouvoir) cliquer sur "Retour" et revenir à la page actuelle.

La seconde remplace l’élément d’historique en cours afin que vous ne puissiez pas y revenir.

Voir window.location:

  • assign(url): charge le document à l'URL fournie.

  • replace(url): remplace le document actuel par celui de l'URL fournie. La différence avec la méthode assign() est qu'après l'utilisation de replace(), la page en cours ne sera pas enregistrée dans l'historique de la session, ce qui signifie que l'utilisateur ne pourra pas utiliser le bouton Précédent pour accéder à il.

window.location.href = url;

est favorisée par rapport à:

window.location = url;
6
Sachin R