Можно ли использовать window.parent.myFunction в iframe?

В JavaScript для <iframe> мне нужно вызвать функцию в родительском окне. Оба окна из одного домена.

Можно ли использовать window.parent.myFunction();?

Ответ 1

Короткий ответ

Да, вы можете использовать window.parent из того же домена.

Раздел 6 спецификации WhatWG: загрузка веб-страниц говорит:

  • iframe.parent существует
  • iframe.parent является прокси-сервером DOM родителя iframe
  • Доступ разрешен, если происхождение одинаковое.

Действительно длинный, длинный ответ

Я пытаюсь показать вам, как вы можете прийти к такому выводу, прочитав спецификацию, сохраняя в уме: каковы характерные черты доступа к parent изнутри iframe?

Пусть начнется. Это длинный текст.

1. Атрибут DOM parent

WhatWG # dom-parent говорит о window.parent:

Атрибут родительского IDL объекта Window объекта Document в контексте просмотра b должен возвращать объект WindowProxy родительского контекста просмотра, если он существует (т.е. если b - это контекст просмотра для детей), или объект WindowProxy контекста просмотра b в противном случае (т.е. если это контекст просмотра верхнего уровня или отдельный вложенный контекст просмотра).

parent - это атрибут доступа к чему-то вроде DOM родительского окна. Однако:

  • Что такое контекст просмотра?
  • Что делает WindowProxy?

Продолжайте чтение.

2. Контекст просмотра

Контекст просмотра - это среда, в которой пользователю Document предоставляются объекты.

WhatWG # Просмотр контекста говорит:

Вкладка или окно в веб-браузере обычно содержит контекст просмотра, как и iframe или фреймы в наборе фреймов. Каждый контекст просмотра имеет соответствующий объект WindowProxy.

3. Прокси окна

Прокси-сервер окна - это объект для прокси-сервера a Window и для обеспечения, например, ограничений безопасности. Для объекта Window может быть несколько прокси (например, два iframes из двух разных доменов, обращающихся к одному и тому же родителю).

WhatWG # прокси-объект говорит:

Объект WindowProxy позволяет сценариям действовать так, как если бы каждый контекст просмотра имел один объект Window, сохраняя при этом отдельные объекты Window для каждого документа.

4. Безопасность

Мы почти там. Продолжайте читать.

WhatWG # security-nav говорит:

Контекст просмотра A разрешен для навигации по второму контексту просмотра B, если выполняется одно из следующих условий:
  • Либо начало активного документа A совпадает с началом активного документа B, либо
  • Контекст просмотра A представляет собой вложенный контекст просмотра с контекстом просмотра верхнего уровня, а его контекст просмотра на верхнем уровне - B или
  • Контекст B просмотра - это вспомогательный контекст просмотра, и A разрешено перемещаться по контексту просмотра B-открывателя или
  • Контекст просмотра B не является контекстом просмотра верхнего уровня, но существует контекст просмотра предков B, активный документ которого совпадает с активным документом A (возможно, фактически являющимся самим A).

5. Вычет

Может ли iframe доступ к функциям доступа из parent, если оба из одного домена? Вывод.

  • parent не является объектом Window родителя, а WindowProxy.
  • Контекст просмотра iframe может получить доступ к его родительскому объекту, поскольку оба они имеют одинаковое происхождение (см. первое условие безопасности выше).

Вы видите: если вы внимательно прочитали спецификацию, вы можете найти ответы, как должны вести себя браузеры. Характеристики чтения являются приобретенным навыком. Это требует терпения и точности.

Однако: мир не так хорош. Существуют браузеры, которые не реализуют спецификации, а также должны. Предостережение emptor.