Quand utiliser window.opener / window.parent / window.top

92

En JavaScript, quand utiliser window.opener/ window.parent/ window.top?

Sriram
la source
3
il y a aussi une window.self qui fait référence à la même fenêtre :)
CodingOnSteroid

Réponses:

163
  • window.openerfait référence à la fenêtre qui a appelé window.open( ... )pour ouvrir la fenêtre à partir de laquelle elle est appelée
  • window.parentfait référence au parent d'une fenêtre dans un <frame>ou<iframe>
  • window.topfait référence à la fenêtre la plus haute d'une fenêtre imbriquée dans une ou plusieurs couches de <iframe>sous-fenêtres

Celles-ci le seront null(ou peut-être undefined) lorsqu'elles ne sont pas pertinentes par rapport à la situation de la fenêtre de référence. ("Fenêtre de référence" désigne la fenêtre dans le contexte de laquelle le code JavaScript est exécuté.)

Pointu
la source
1
Merci @pointy pour la réponse. J'ai une page principale qui ouvre un enfant en utilisant window.open()une page soumettre. Maintenant, cette fenêtre enfant ouvre une autre fenêtre enfant avec le même window.open()self de fermeture. Désormais, lorsque je soumets mon deuxième enfant (le premier enfant n'existe plus), je souhaite accéder aux éléments de page de ma page principale. Est-ce possible à partir du deuxième enfant lorsque le premier n'est plus présent?
Sriram
4
@Sriram: C'est le genre d'informations que vous devez mettre dans votre question, pour que les gens sachent quel problème vous essayez vraiment de résoudre.
josh3736
5
@Sriram vous devrez saisir window.opener.openeravant que la page intermédiaire ne disparaisse.
Pointy du
23

Je pense que vous devez ajouter du contexte à votre question. Cependant, des informations de base sur ces choses peuvent être trouvées ici:

window.opener https://developer.mozilla.org/en-US/docs/Web/API/Window.opener

J'ai utilisé window.opener principalement lors de l'ouverture d'une nouvelle fenêtre qui agissait comme une boîte de dialogue nécessitant une entrée de l'utilisateur et devant renvoyer des informations à la fenêtre principale. Cependant, cela est limité par la politique d'origine, vous devez donc vous assurer que le contenu de la boîte de dialogue et de la fenêtre d'ouverture sont chargés à partir de la même origine.

window.parent https://developer.mozilla.org/en-US/docs/Web/API/Window.parent

Je l'ai surtout utilisé lorsque je travaille avec des IFrames qui doivent communiquer avec l'objet window qui les contient.

window.top https://developer.mozilla.org/en-US/docs/Web/API/Window.top

Ceci est utile pour vous assurer que vous interagissez avec la fenêtre du navigateur de niveau supérieur. Vous pouvez l'utiliser pour empêcher un autre site d'iframe votre site Web, entre autres.

Si vous ajoutez plus de détails à votre question, je peux vous fournir d’autres exemples plus pertinents.

MISE À JOUR: Il existe plusieurs façons de gérer votre situation.
Vous avez la structure suivante:

  • Fenêtre principale
    • Dialogue 1
      • Boîte de dialogue 2 ouverte par la boîte de dialogue 1

Lorsque la boîte de dialogue 1 exécute le code pour ouvrir la boîte de dialogue 2, après avoir créé la boîte de dialogue 2, demandez à la boîte de dialogue 1 de définir une propriété sur la boîte de dialogue 2 qui fait référence à l'ouvre-boîte de dialogue Dialog1.

Donc, si "childwindow" est votre variable pour l'objet fenêtre de dialogue 2, et "fenêtre" est la variable pour l'objet de fenêtre Dialog 1. Après avoir ouvert la boîte de dialogue 2, mais avant de fermer la boîte de dialogue 1, effectuez une affectation similaire à celle-ci:

childwindow.appMainWindow = window.opener

Après avoir effectué l'affectation ci-dessus, fermez la boîte de dialogue 1. Ensuite, à partir du code qui s'exécute dans dialog2, vous devriez pouvoir utiliser window.appMainWindowpour référencer la fenêtre principale, l'objet de la fenêtre.

J'espère que cela t'aides.

Mark At Ramp51
la source
Merci @Mark pour la réponse. J'ai une page principale qui ouvre un enfant en utilisant window.open()une page soumettre. Maintenant, cette fenêtre enfant ouvre une autre fenêtre enfant avec le même window.open()self de fermeture. Maintenant, lorsque je soumets mon deuxième enfant (le premier enfant n'existe plus), je voudrais accéder aux éléments de page de ma page principale. Est-ce possible à partir du deuxième enfant lorsque le premier n'est plus présent?
Sriram
réponse mise à jour. @ josh3736 - Je ne vois pas en quoi ce commentaire est utile. Je ne conseille à personne d'obtenir une certification w3schools. Tout le monde ici sait comment rechercher sur Google et obtenir la définition de base de window.opener, window.top et window.parent. Utilisez les liens ci-dessus ou trouvez de nouvelles références, mais il n'est guère utile de dupliquer les informations qui définissent simplement ces propriétés ici.
Mark At Ramp51
L'explication était vraiment utile @ MarkAtRamp51 Merci!
Sriram
3
Le lien explique - en détail - ce qui ne va pas avec w3schools. Le but est d'éviter de promouvoir ou de créer des liens vers (et donc d'augmenter le PageRank de Google de) w3schools en tant que source d'information faisant autorité. W3S diffuse de mauvaises informations, et une partie du problème est que tant de personnes sont liées à ces mauvaises informations. Mieux vaut établir un lien vers une source d’information plus fiable, comme MDN .
josh3736
5

top, parent, opener (ainsi que window, self et iframe) sont tous des objets window.

  1. window.opener -> renvoie la fenêtre qui ouvre ou lance la fenêtre popup courante.
  2. window.top -> renvoie la fenêtre la plus haute, si vous utilisez des cadres, c'est la fenêtre du jeu de cadres, si vous n'utilisez pas de cadres, c'est la même chose que window ou self.
  3. window.parent-> renvoie l'image parente de l'image courante ou de l'iframe. Le cadre parent peut être la fenêtre du jeu de cadres ou un autre cadre si vous avez des cadres imbriqués. Si vous n'utilisez pas de cadres, le parent est le même que la fenêtre ou soi
Ravir
la source
1

lorsque vous avez affaire à des popups window.opener joue un rôle important, car nous devons traiter les champs de la page parent ainsi que la page enfant, lorsque nous devons utiliser des valeurs sur la page parent, nous pouvons utiliser window.opener ou nous voulons des données sur la fenêtre enfant ou la fenêtre contextuelle au moment du chargement, nous pouvons à nouveau définir les valeurs en utilisant window.opener

Maître du donjon
la source