85 votes

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

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

152voto

Pointy Points 172438
  • 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é).

22voto

Mark At Ramp51 Points 2101

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

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.

5voto

Ravish Points 899

Top, parent, opener (ainsi que window, self, et iframe) sont tous des objets fenêtre.

  1. window.opener -> renvoie la fenêtre qui ouvre ou lance la fenêtre popup actuelle.
  2. 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.
  3. 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.

1voto

Uday Jadhav Points 1

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X