En JavaScript, quand utiliser window.opener
/ window.parent
/ window.top
?
Réponses
Trop de publicités?-
window.opener
fait référence à la fenêtre qui a appeléwindow.open( ... )
pour ouvrir la fenêtre à partir de laquelle il est appelé -
window.parent
fait référence au parent d'une fenêtre dans un<frame>
o<iframe>
-
window.top
fait 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
Ceux-ci seront null
(ou peut-être undefined
) lorsqu'ils ne sont pas pertinents pour la situation de la fenêtre de référence. ("Fenêtre de référence" signifie la fenêtre dans le contexte de laquelle le code JavaScript est exécuté).
Je pense que vous devez ajouter un peu de 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 pour ouvrir une nouvelle fenêtre qui agissait comme une boîte de dialogue nécessitant une entrée de l'utilisateur, et qui devait renvoyer des informations à la fenêtre principale. Cependant, cela est limité par la politique d'origine, et vous devez donc vous assurer que le contenu de la boîte de dialogue et 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 utilisé principalement pour travailler avec des IFrames qui doivent communiquer avec l'objet fenêtre qui les contient.
window.top
https://developer.mozilla.org/en-US/docs/Web/API/Window.top
Ceci est utile pour s'assurer que vous interagissez avec la fenêtre supérieure du navigateur. Vous pouvez l'utiliser pour empêcher un autre site d'iframer votre site Web, entre autres choses.
Si vous ajoutez quelques détails à votre question, je peux fournir d'autres exemples plus pertinents.
UPDATE : Il y a plusieurs façons de gérer votre situation.
Vous avez la structure suivante :
- Fenêtre principale
- Dialogue 1
- Dialogue 2 ouvert par le dialogue 1
- 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'ouvreur de la boîte de dialogue 1.
Ainsi, si "childwindow" est votre variable pour l'objet fenêtre du dialogue 2, et "window" est la variable pour l'objet fenêtre du dialogue 1. Après avoir ouvert le dialogue 2, mais avant de fermer le dialogue 1, faites une affectation similaire à celle-ci :
childwindow.appMainWindow = window.opener
Après avoir effectué l'affectation ci-dessus, fermez le dialogue 1. Ensuite, à partir du code s'exécutant dans le dialogue 2, vous devriez pouvoir utiliser window.appMainWindow
pour faire référence à la fenêtre principale, objet fenêtre.
J'espère que cela vous aidera.
Top, parent, opener (ainsi que window, self, et iframe) sont tous des objets fenêtre.
-
window.opener
-> renvoie la fenêtre qui ouvre ou lance la fenêtre popup actuelle. -
window.top
-> renvoie la fenêtre la plus haute, si vous utilisez des cadres, c'est la fenêtre frameset, si vous n'utilisez pas de cadres, c'est la même chose que window ou self. -
window.parent
-> renvoie le cadre parent du cadre ou de l'iframe actuel. Le cadre parent peut être la fenêtre frameset ou un autre cadre si vous avez des cadres imbriqués. Si vous n'utilisez pas de cadres, le parent est la même chose que la fenêtre actuelle ou le self.
Lorsque vous traitez avec des popups, window.opener joue un rôle important, car nous devons traiter les champs de la page parentale et de la page enfant, lorsque nous devons utiliser des valeurs sur la page parentale, nous pouvons utiliser window.opener ou nous voulons des données sur la fenêtre enfant ou la fenêtre popup au moment du chargement, là encore nous pouvons définir les valeurs en utilisant window.opener.