web-dev-qa-db-fra.com

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

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

84
Sriram
  • window.opener fait référence à la fenêtre appelée window.open( ... ) pour ouvrir la fenêtre à partir de laquelle elle est appelée.
  • window.parent fait référence au parent d'une fenêtre dans un <frame> ou <iframe>
  • window.top fait référence à la fenêtre la plus en haut d'une fenêtre imbriquée dans une ou plusieurs couches de sous-fenêtres <iframe>

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

148
Pointy

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.openerhttps://developer.mozilla.org/en-US/docs/Web/API/Window.opener

J'ai principalement utilisé window.opener lors de l'ouverture d'une nouvelle fenêtre faisant office de boîte de dialogue nécessitant la saisie de l'utilisateur et devant renvoyer des informations à la fenêtre principale. Toutefois, cela est limité par la stratégie d'origine. 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.parenthttps://developer.mozilla.org/en-US/docs/Web/API/Window.parent

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

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

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

Si vous ajoutez un peu plus de détails à votre question, je pourrai vous donner d'autres exemples plus pertinents.

UPDATE: Il existe 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 la création de 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 Dialog1.

Donc, si "childwindow" est votre variable pour l'objet window de dialogue 2, et "window" est la variable pour l'objet window de Dialog 1. Après avoir ouvert la boîte de dialogue 2, mais avant la fermeture de la boîte de dialogue 1, effectuez un travail similaire à celui-ci:

childwindow.appMainWindow = window.opener

Après avoir effectué l’affectation ci-dessus, fermez la boîte de dialogue 1. Ensuite, à partir du code exécuté dans la boîte de dialogue2, vous devriez pouvoir utiliser window.appMainWindow pour faire référence à l’objet window de la fenêtre principale.

J'espère que cela t'aides.

21
Mark At Ramp51

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

  1. window.opener -> renvoie la fenêtre qui s'ouvre ou lance la fenêtre contextuelle actuelle.
  2. window.top -> renvoie la fenêtre la plus haute. Si vous utilisez des cadres, il s'agit de la fenêtre du jeu de cadres. Si vous n'utilisez pas de cadres, cela revient à window ou à vous-même.
  3. window.parent -> renvoie le cadre parent du cadre actuel 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, parent est identique à la fenêtre actuelle ou auto
5
Ravish

window.opener joue un rôle important dans le traitement des champs de page parent et de page enfant; lorsque nous devons utiliser les valeurs de 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 à l’aide de window.opener

1
Dugen Master