Как для iframe получить доступ к DOM своих родителей?

Как возможно, чтобы script внутри <iframe> имел какое-либо понятие страницы, содержащей его? Может ли script в кадре получить доступ к любому контексту вне его? Как насчет междоменного?

До сих пор я полагал, что <iframe> полностью агностически относится к содержательной странице, но я видел пример, который противоречит этому убеждению.

Что именно можно и не может сделать из <iframe> по отношению к содержащейся странице?

Ответы

Ответ 1

Если содержимое iframe и его родительского элемента имеют одинаковый домен, вы можете получить доступ к DOM родительских страниц из iframe, используя parent.document.getElement...

Однако вы не можете сделать это кросс-домен (даже между разными поддоменами), так как это приведет к:

Uncaught DOMException: Blocked a frame with origin "https://example.com" from accessing a cross-origin frame.

Ответ 2

Как правило, вы не можете связываться между двумя доменами DOM через домены. Тем не менее, есть способ передать сообщения между ними, используя хэш-часть URL-адреса iframe. Для iframes в том же домене см. ответ oezi.

Это может оказать некоторую помощь, а также множество других вопросов по этой теме.

Ответ 3

Если они не находятся в одном домене, вы можете передавать некоторую информацию через фрагмент/хэш URL-адреса. Вот хороший пример этого процесса...

http://www.tagneto.org/blogcode/xframe/ui.html