Могут ли страницы iframe сказать, когда они созданы? - PullRequest
7 голосов
/ 02 октября 2009

Итак, я знаю, что если я добавлю iFrame на страницу, которая не находится в том же домене, я не смогу получить доступ к DOM iframe через политику браузера, но могу ли страница, находящаяся в iframe, получить доступ к любому родительскому документу

В частности, у меня есть идеи, которые зависят от этого вопроса:

  1. Если встроенная страница может сказать, что она не является родительским окном, можно сделать любой из сайтов, не поддерживающий iframe, таким образом, чтобы, если страница обнаруживает, что она вставлена, она превращается в страницу «Уходи» ИЛИ вы можете сделать так, чтобы это было возможно только в iframe (аналогично серверному сценарию для страниц, которые предназначены только для включения), чтобы при переходе на страницу, когда она не в фрейме, была получена страница «Уйти».

  2. Если у страницы iframed есть определенные свободы, которых нет у родительского окна, она может запросить таблицу стилей родительского окна и установить ее в качестве таблицы стилей, что сделает сайт более интегрированным с родительским документом. (Конечно, тогда я мог бы просто сделать так, чтобы моя таблица стилей больше относилась к сайту iframed, зная, что это сделает это, но я не рассматриваю это как проблему).

Кто-нибудь знает?

Ответы [ 4 ]

11 голосов
/ 02 октября 2009

Относительно # 1, да, вы можете сказать, что вас подставили, используя какой-то простой javascript:

<script type="text/javascript">
if (self != top)
{
  // Framed!
}
</script>

Что касается # 2, я не уверен, что вы можете сделать, используя переменную "top", но я знаю, что вы можете изменить его местоположение (поэтому, если ваш сайт создан другим сайтом, вы можете изменить свой фрейм расположение верхнего фрейма - по сути, перенаправление пользователя непосредственно на ваш сайт).

Не уверен, что еще вы можете или не можете сделать с верхним фреймом - кто-то еще сможет предоставить там больше информации.

4 голосов
/ 02 октября 2009

Возможно, вас заинтересует эта статья об ужасах кодирования об обнаружении кадров. Вы можете определить, были ли вы подставлены, но есть и контрмеры, которые может предпринять «родительская» страница, чтобы помешать вам действовать в этом направлении. Пример из статьи:

Определите, были ли вы подставлены:

if (parent.frames.length > 0) {
    top.location.replace(document.location);
}

Запретить обнаружение и перенаправление кадра:

   var prevent_bust = 0  
   window.onbeforeunload = function() { prevent_bust++ }  
   setInterval(function() {  
     if (prevent_bust > 0) {  
       prevent_bust -= 2  
       window.top.location = 'http://server-which-responds-with-204.com'  
     }  
   }, 1)  
1 голос
/ 02 октября 2009

Это возможно путем встраивания следующего JavaScript в страницу:

if(top.location.href != self.location){
//do redirection or display message
}

Вы можете использовать этот Javascript как часть шаблона сайта и запретить отображение любой страницы в IFrame

0 голосов
/ 02 октября 2009

Я делал это раньше, и это сработало:

<script type="text/javascript">
if (window.parent != null)
{
  // Framed!
}
</script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...