Доступ к родительской странице с помощью JavaScript внутри iframe - PullRequest
1 голос
/ 30 августа 2010

Есть ли способ "вырваться" из iframe? Под этим я подразумеваю, что люди будут помещать мой тег javascript в iframe (иногда он заканчивается вложенными iframe, но сейчас давайте разберемся с ONE). Я пытаюсь собрать определенную информацию, например, где находится этот iframe на странице. Это достаточно легко сделать, когда вы не находитесь в iframe со смесью offsetLeft / offsetTop / innerHeight / innerWidth, но я знаю, что вы не можете (или не должны быть в состоянии) видеть что-либо вне iframe Ваш вход (при условии, что это разные домены).

У кого-нибудь есть советы по этому поводу? Или хотя бы какие-нибудь ресурсы, которые я мог бы изучить больше? Хотя я в конечном итоге хотел бы получить доступ к DOM исходной страницы, с JS внутри iframe, я знаю, что это на самом деле невозможно. А пока я бы с удовольствием выяснил, где находится iframe на странице. Я не уверен, является ли эта информация частью DOM или свойствами браузера (к которым, я полагаю, вы все еще можете получить доступ?)

Спасибо!

Ответы [ 4 ]

3 голосов
/ 30 августа 2010

Короткий ответ - нет.

Более длинный ответ заключается в том, что с CORS и межкадровым / доменным обменом сообщениями вы теперь лучше, чем раньше. Но вы получите толстый «ACCESS DENIED», если попытаетесь получить доступ к DOM в родительском фрейме из другого домена.

Если вы поместили в родительский файл какой-то javascript, который может загружать такие вещи, как изображения, которые устанавливают куки на вашем сервере, тогда да. но я думаю, это не то, что вы имеете в виду

Вот пример того, как вы можете получить источник - пусть пользователи вашего iframe загрузят его так:

    <script type="text/javascript">
    document.write('<script src="yourIframeLoader.php?parent='+escape(location.href)+'"><\/script>');
    </script>
1 голос
/ 30 августа 2010

Это не работает кросс-домен. Это основная функция безопасности, препятствующая работе javascript между доменами (она называется политикой одного и того же происхождения).

Представьте, что вы начали на каком-то злом сайте: www.evil.com. Оттуда, так или иначе, они вынуждают вас нажать на ссылку, которую вы ожидаете, чтобы перейти на чувствительный сайт (PayPal, ваш банк, что угодно). Однако вместо того, чтобы отправлять вас на этот сайт, они фактически вставляют его. Вы идете вперед и входите в систему. БАМ.

Если бы их сценарии имели доступ к DOM междоменного iFrame, они могли легко поймать любые данные, которые вы передаете через формы журнала в формах. Противно, а? Там просто нет способа справиться с этим безопасно, поэтому он отключен (кроме, возможно, JSONP)

0 голосов
/ 30 августа 2010

Хотя iFrame не может напрямую изменить своего родителя, родитель может читать данные из iFrame.

Это означает, что родительская HTML-страница может использовать JS для просмотра данных в дочерних iFrames.

Если вы контролируете и родительский контент, и содержимое iFrame, то вы можете настроить передачу сообщений от iFrame к родительскому элементу через согласованный идентификатор элемента в iFrame.

0 голосов
/ 30 августа 2010

Вы всегда можете реализовать некоторые функции javascript на родительской странице и вызывать их из iframe, вызывая parent.Myfunction();

Что касается определения позиции iframe, я не уверен в этом.

...