2010-08-30 2 views
1

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

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

Спасибо!

+0

Если вы хотите получить определенную информацию (например, местоположение), вы можете сделать это требование для предоставления контента вашим клиентам. Просто дайте им примеры того, как назвать ваш контент (предоставление вспомогательного JS и т. Д.).И ваша страница может использовать информацию об ошибке или обратную ошибку для вызывающего. –

+0

Да, к сожалению, времена, когда мой тег будет передан между несколькими людьми, добавлен в другие системы и выплюнул с другой стороны ect. поэтому я не в состоянии реализовать правила. Можете ли вы получить доступ к URL-адресу страницы, на которой вы закончили? Даже если вы вложены в один или несколько фреймов? Или это все еще противоречит политике безопасности ... – Brad

ответ

3

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

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

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

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

<script type="text/javascript"> 
    document.write('<script src="yourIframeLoader.php?parent='+escape(location.href)+'"><\/script>'); 
    </script> 
+0

Да, этого я и боялся. Я посмотрю на перекрестные рамки/доменные сообщения немного больше и посмотрю, поможет ли это _might_, но я сомневаюсь. Самая большая проблема, которую я испытываю, заключается в том, что я полностью не контролирую, на какой странице я заканчиваю. Таким образом, будут разные домены, я не могу добавить никаких дополнительных JS для загрузки изображений/файлов cookie, ничего. Можете ли вы хотя бы посмотреть, в какой области вы попадаете? Если вы находитесь в одном или нескольких iframe, можете ли вы просмотреть/посмотреть, на какой странице вы в конечном счете? – Brad

+0

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

1

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

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

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

0

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

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

0

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

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

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

Смежные вопросы