Javascript и тот же источник iframes - PullRequest
8 голосов
/ 22 апреля 2010

Можно ли читать / редактировать содержимое iframe (не только свойства, такие как src) со скриптами, которые находятся на странице, но за пределами этого фрейма?Я знаю, что это невозможно, если источник взят с другого сайта, поскольку это будет большая дыра в безопасности, но я спрашиваю только, работает ли он для другого контента того же происхождения.

Ответы [ 5 ]

5 голосов
/ 06 августа 2010

Чтобы добавить к тому, что уже было сказано о взаимодействии с фреймами, загруженными из того же домена:

Браузер позволит вам взаимодействовать с фреймами (или фреймами), если страница, которая пытается выполнить взаимодействие, и страница, которую вы загрузили, имеют один и тот же document.domain.

Вы можете установить для document.domain суффикс хоста, с которого вы были загружены. например если у вас есть страница, загруженная с blog.fred.com, и она хочет взаимодействовать с каким-либо сервисом, называемым jsonservice.fred.com, обе страницы должны будут выполнить

document.domain = 'fred.com';

до того, как javascript от одного сможет взаимодействовать с другим.

Браузеры достаточно умны, чтобы позволить вам установить ваш document.domain в '.com', если вам интересно ...

4 голосов
/ 04 августа 2010

Да, вы можете сделать это, если расположение iframe и родительской страницы находятся на одном хосте (одна и та же политика происхождения).

Чтобы браузер позволил вам это сделать, вы можете использовать

document.domain = "example.com" 

на родительской странице и в фрейме. (обратите внимание, что subdomain.example.com и example.com различаются)

Метод Dom для этого (родительская страница в iframe):

document.getElementById("myiframe").contentWindow.document.getElementById("divinframe").innerHTML = "I'm on the inside.";

document.getElementById("myiframe").contentWindow.someFunctionInsideIframe();

contentWindow является ответом и работает в большинстве, если не во всех современных браузерах, конечно, в Chrome, т.е. 7+ и т. Д.

Чтобы пойти другим путем (iframe на родительскую страницу):

top.document.getElementById("DivInTopParent")
0 голосов
/ 06 января 2016

Это не совсем решение на стороне клиента / javascript, но оно помогло мне решить проблему.

Вам необходимо удалить заголовок X-Frame-Options, если он есть, и вместо этого отправить следующий для страницы iframe:

Content-Security-Policy: frame-ancestors 'self' example.com *.example.com

и дополнительный для IE:

X-Content-Security-Policy: frame-ancestors 'self' example.com *.example.com
0 голосов
/ 26 июля 2010

Браузер ограничивает доступ к содержимому iframe / parent только для контента, который не принадлежит тому же домену. Для запросов из того же домена вы можете получить доступ к контенту через window.parent или myiframe.document.getElementById

0 голосов
/ 22 апреля 2010

, если iframe-контент находится в том же домене, вы можете получить к нему доступ, используя frames.myiframe.getElement...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...