Получить top href и innerHTML изнутри iframe - PullRequest
2 голосов
/ 14 апреля 2009

Есть ли способ получить какую-либо информацию сверху из iframe в отдельном домене? Кто-то поручил мне проверки, что их реклама не рядом с вещи, как порнография, и т.д ... но их объявления всегда внутри IFRAME на сайтах издателей.

Интересно, что когда я помещаю twitter.com в iframe, у них включается технология удаления iframe - вот так:

<script type="text/javascript">
//<![CDATA[
    if (window.top !== window.self) { setTimeout(function(){document.body.innerHTML='';},1);window.self.onload=function(evt){document.body.innerHTML='';};}
//]]>
</script>

Что меня поразило, так это то, что, как другой домен, у них все еще есть возможность получить window.top. Однако, когда я пытаюсь расширить эту функциональность до window.top.location или window.top.href, чтобы получить URL верхнего окна, я получаю

uncaught exception: [Exception... "Component returned failure code: 0x8007000e (NS_ERROR_OUT_OF_MEMORY) [nsIDOMNSHTMLDocument.write]"  nsresult: "0x8007000e (NS_ERROR_OUT_OF_MEMORY)"  location: "JS frame :: http://tester.tester.com/iframe3.html :: <TOP_LEVEL> :: line 9"  data: no]
http://tester.tester.com/iframe3.html
Line 9 

что на самом деле просто ошибка разрешения, о которой Gecko сообщает неправильно (я думаю).

Есть мысли по этому поводу? Доступно ли утверждение равенства, потому что iframe на самом деле не получает данные, а сама информация недоступна?

Любая информация, которую я могу получить, будет лучше, чем ничего, поэтому, пожалуйста, не стесняйтесь вводить частичные ответы. Спасибо.

Ответы [ 2 ]

3 голосов
/ 14 апреля 2009

Доступно ли утверждение равенства, потому что iframe на самом деле не получает данные, а сами данные недоступны?

Это древняя причуда JavaScript, в которой вы всегда можете получить объект «окна» междоменного фрейма / iframe / parent / opener. Но - по очевидным причинам безопасности - вы не можете получить доступ к большинству членов объекта. Иногда в прошлом возникали способы обойти эти ограничения из-за ошибок в браузере, но не на что вы можете положиться.

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

Если вы хотите проверить, находится ли неизвестное окно хотя бы внутри вашего собственного домена, вы можете попытаться получить доступ к otherwindow.location внутри блока try...catch.

Есть ли способ получить какую-либо информацию изнутри iframe в отдельном домене?

Нет, но вы можете записать заголовок 'Referer' на стороне HTTP-сервера, чтобы увидеть, какая страница содержит

if (window.top! == window.self)

Любопытный; window.self - это то же самое, что и window; Я не знаю, почему вы бы использовали более длинную версию. Самая короткая идиома для этого теста:

if (top!==self)

, которая работает до тех пор, пока вы не определяете другие переменные, называемые "top" или "self".

1 голос
/ 14 апреля 2009

Нет, нет. Это из-за межсайтовых скриптов атак.

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