В JavaScript для <iframe>
мне нужно вызвать функцию в родительском окне. Оба окна из одного домена.
Можно ли использовать window.parent.myFunction();
?
В JavaScript для <iframe>
мне нужно вызвать функцию в родительском окне. Оба окна из одного домена.
Можно ли использовать window.parent.myFunction();
?
Да, вы можете использовать window.parent
из того же домена.
Раздел 6 спецификации WhatWG: загрузка веб-страниц говорит:
iframe.parent
существуетiframe.parent
является прокси-сервером DOM родителя iframe
Я пытаюсь показать вам, как вы можете прийти к такому выводу, прочитав спецификацию, сохраняя в уме: каковы характерные черты доступа к parent
изнутри iframe
?
Пусть начнется. Это длинный текст.
parent
WhatWG # dom-parent говорит о window.parent
:
Атрибут родительского IDL объекта
Window
объектаDocument
в контексте просмотра b должен возвращать объектWindowProxy
родительского контекста просмотра, если он существует (т.е. если b - это контекст просмотра для детей), или объектWindowProxy
контекста просмотра b в противном случае (т.е. если это контекст просмотра верхнего уровня или отдельный вложенный контекст просмотра).
parent
- это атрибут доступа к чему-то вроде DOM родительского окна. Однако:
WindowProxy
?Продолжайте чтение.
Контекст просмотра - это среда, в которой пользователю Document
предоставляются объекты.
WhatWG # Просмотр контекста говорит:
Вкладка или окно в веб-браузере обычно содержит контекст просмотра, как и iframe или фреймы в наборе фреймов. Каждый контекст просмотра имеет соответствующий объект WindowProxy.
Прокси-сервер окна - это объект для прокси-сервера a Window
и для обеспечения, например, ограничений безопасности. Для объекта Window
может быть несколько прокси (например, два iframes
из двух разных доменов, обращающихся к одному и тому же родителю).
WhatWG # прокси-объект говорит:
Объект WindowProxy позволяет сценариям действовать так, как если бы каждый контекст просмотра имел один объект Window, сохраняя при этом отдельные объекты Window для каждого документа.
Мы почти там. Продолжайте читать.
WhatWG # security-nav говорит:
Контекст просмотра A разрешен для навигации по второму контексту просмотра B, если выполняется одно из следующих условий:
- Либо начало активного документа A совпадает с началом активного документа B, либо
- Контекст просмотра A представляет собой вложенный контекст просмотра с контекстом просмотра верхнего уровня, а его контекст просмотра на верхнем уровне - B или
- Контекст B просмотра - это вспомогательный контекст просмотра, и A разрешено перемещаться по контексту просмотра B-открывателя или
- Контекст просмотра B не является контекстом просмотра верхнего уровня, но существует контекст просмотра предков B, активный документ которого совпадает с активным документом A (возможно, фактически являющимся самим A).
Может ли iframe
доступ к функциям доступа из parent
, если оба из одного домена? Вывод.
parent
не является объектом Window
родителя, а WindowProxy
.iframe
может получить доступ к его родительскому объекту, поскольку оба они имеют одинаковое происхождение (см. первое условие безопасности выше).Вы видите: если вы внимательно прочитали спецификацию, вы можете найти ответы, как должны вести себя браузеры. Характеристики чтения являются приобретенным навыком. Это требует терпения и точности.
Однако: мир не так хорош. Существуют браузеры, которые не реализуют спецификации, а также должны. Предостережение emptor.