Когда использовать window.opener / window.parent / window.top
В JavaScript, когда использовать window.opener
/ window.parent
/ window.top
?
4 ответа
window.opener
относится к окну, которое называетсяwindow.open( ... )
открыть окно, из которого он называетсяwindow.parent
относится к родителю окна в<frame>
или же<iframe>
window.top
относится к самому верхнему окну из окна, вложенного в один или несколько слоев<iframe>
суб-окно
Те будут null
(или, может быть undefined
) когда они не имеют отношения к ситуации со ссылкой на окно. ("Ссылающееся окно" означает окно, в контексте которого выполняется код JavaScript.)
Я думаю, вам нужно добавить некоторый контекст в ваш вопрос. Тем не менее, основная информация об этих вещах может быть найдена здесь:
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
Когда диалог 1 запускает код для открытия диалогового окна 2, после создания диалогового окна 2 диалоговое окно 1 устанавливает свойство в диалоговом окне 2, которое ссылается на средство открытия диалогового окна Dialog1.
Поэтому, если childwindow - это переменная для объекта окна диалогового окна 2, а "окно" - это переменная для объекта окна диалогового окна 1. После открытия диалогового окна 2, но перед закрытием диалогового окна 1 сделайте присваивание, похожее на это:
childwindow.appMainWindow = window.opener
После выполнения вышеуказанного назначения закройте диалоговое окно 1. Затем из кода, работающего внутри dialog2, вы сможете использовать window.appMainWindow
для ссылки на главное окно, оконный объект.
Надеюсь это поможет.
top, parent, opener (а также window, self и iframe) - все это оконные объекты.
window.opener
-> возвращает окно, которое открывается или запускает текущее всплывающее окно.window.top
-> возвращает самое верхнее окно, если вы используете фреймы, это окно набора фреймов, если не используются фреймы, это то же самое, что и окно или self.window.parent
-> возвращает родительский кадр текущего кадра или iframe. Родительским фреймом может быть окно набора фреймов или другой фрейм, если у вас есть вложенные фреймы. Если рамки не используются, родительский элемент совпадает с текущим окном или собственным
Когда вы имеете дело с всплывающими окнами, window.opener играет важную роль, потому что мы должны иметь дело с полями родительской страницы, а также дочерней страницы, когда нам нужно использовать значения на родительской странице, мы можем использовать window.opener или нам нужны некоторые данные в дочернем окне или всплывающем окне во время загрузки, то мы снова можем установить значения с помощью window.opener