Коли використовувати window.opener / window.parent / window.top


94

Коли використовувати в JavaScript window.opener/ window.parent/ window.top?


3
є також вікно. себе, яке посилається на те саме вікно :)
CodingOnSteroid

Відповіді:


167
  • window.openerвідноситься до вікна, яке викликало window.open( ... )відкриття вікна, з якого воно викликається
  • window.parentвідноситься до батьківського вікна у <frame>або<iframe>
  • window.topвідноситься до самого верхнього вікна з вікна, вкладеного в один або кілька шарів <iframe>підвікон

Вони будуть null(або, можливо, undefined), коли вони не мають відношення до ситуації вікна переходу. ("Вікно посилання" означає вікно, в контексті якого запускається код JavaScript.)


1
Дякую @pointy за відповідь. У мене є головна сторінка, яка відкриває дитину за допомогою window.open()надсилання сторінки. Тепер це дочірнє вікно відкриває інше дочірнє вікно з тим самим window.open()закритим собою. Тепер, коли я подаю свою другу дитину (перша дитина вже не існує), я хотів би отримати доступ до елементів сторінки моєї головної сторінки. Чи можливо це від другої дитини, коли першої вже немає?
Шрірам

4
@Sriram: Ось таку інформацію потрібно ввести у своєму питанні, щоб люди знали, яку проблему ви насправді намагаєтесь вирішити.
josh3736

5
@Sriram вам доведеться захопити window.opener.openerдо того, як проміжна сторінка зникне.
Пойнті

24

Думаю, вам потрібно додати якийсь контекст до свого запитання. Однак основну інформацію про ці речі можна знайти тут:

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

Я використовував window.opener здебільшого, коли відкривав нове вікно, яке діяло як діалогове вікно, яке вимагало введення користувачем і необхідне для передачі інформації назад у головне вікно. Однак це обмежено політикою походження, тому вам потрібно забезпечити завантаження вмісту з діалогового вікна та вікна відкривача з одного походження.

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

Я використовував це здебільшого під час роботи з IFrames, які повинні взаємодіяти з об'єктом вікна, який їх містить.

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

Це корисно для забезпечення взаємодії з вікном браузера верхнього рівня. Ви можете використовувати його для запобігання тому, щоб інший сайт не вносив рамки у ваш веб-сайт, серед іншого.

Якщо ви додасте трохи детальніше до свого запитання, я можу надати інші більш відповідні приклади.

ОНОВЛЕННЯ. Існує кілька способів вирішити вашу ситуацію.
Ви маєте таку структуру:

  • Головне вікно
    • Діалогове вікно 1
      • Діалогове вікно 2, відкрите діалоговим вікном 1

Коли діалогове вікно 1 запускає код для відкриття діалогового вікна 2, після створення діалогового вікна 2 діалогове вікно 1 має задати властивість діалогового вікна 2, яке посилається на відкривач діалогового вікна 1.

Отже, якщо "дитяче вікно" - це змінна для об'єкта вікна діалогового вікна 2, а "вікно" - це змінна для віконного об'єкта Діалогове вікно 1. Після відкриття діалогового вікна 2, але перед закриттям діалогового вікна 1, виконайте завдання, подібне до цього:

childwindow.appMainWindow = window.opener

Після призначення вище закрийте діалогове вікно 1. Потім із коду, що працює всередині dialog2, ви зможете використовувати window.appMainWindowпосилання на головне вікно, об'єкт вікна.

Сподіваюся, це допомагає.


Дякую @Mark за відповідь. У мене є головна сторінка, яка відкриває дитину за допомогою window.open()подання сторінки. Тепер це дочірнє вікно відкриває інше дочірнє вікно з тим самим window.open()закритим собою. Тепер, коли я подаю свою другу дитину (перша дитина вже не існує), я хотів би отримати доступ до елементів сторінки моєї головної сторінки. Чи можливо це від другої дитини, коли першої вже немає?
Шрірам

оновлена ​​відповідь. @ josh3736 - Я не бачу, наскільки цей коментар корисний. Я не раджу нікому проходити сертифікацію w3schools. Всі тут знають, як погуглити та отримати основне визначення window.opener, window.top та window.parent. Скористайтеся посиланнями вище або знайдіть нові посилання, але навряд чи є сенс дублювати інформацію, яка просто визначає ці властивості тут.
Mark At Ramp51

Пояснення було дуже корисним @ MarkAtRamp51 Дякую!
Шрірам

3
Посилання пояснює - дуже докладно - що не так із w3schools. Суть полягає в тому, щоб уникати просування або посилання на (і, таким чином, збільшення Google PageRank of) w3schools як авторитетного джерела інформації. W3S поширює погану інформацію, і частина проблеми полягає в тому, що стільки людей посилається на цю погану інформацію. Краще було б зробити посилання на більш надійне джерело інформації, таке як MDN .
josh3736

5

top, parent, opener (а також window, self та iframe) - це всі об'єкти вікна.

  1. window.opener -> повертає вікно, що відкриває або запускає поточне спливаюче вікно.
  2. window.top -> повертає верхнє вікно, якщо ви використовуєте кадри, це вікно набору фреймів, якщо не використовуєте фрейми, це те саме, що вікно або self.
  3. window.parent-> повертає батьківський кадр поточного кадру або iframe. Батьківський кадр може бути вікном набору кадрів або іншим кадром, якщо у вас є вкладені кадри. Якщо не використовується фрейми, батьківський елемент збігається з поточним вікном або самостійним

1

коли ви маєте справу зі спливаючими вікнами window.opener відіграє важливу роль, оскільки нам доводиться мати справу з полями батьківської сторінки, а також дочірньої сторінки, коли нам потрібно використовувати значення на батьківській сторінці, ми можемо використовувати window.opener або ми хочемо отримати деякі дані у дочірньому вікні або спливаючому вікні під час завантаження, тоді ми знову можемо встановити значення за допомогою window.opener

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.