2010-09-16 2 views
4

Я создаю виджет, который будет загружаться в IFrame, и пользователи смогут размещать виджет на своем собственном веб-сайте. Как получить URL-адрес веб-сайта, использующего IFrame в javascript и/или PHP? IFrame загружает файл php.получить родительский url iframe в PHP

Я попытался «parent.top.location.href» и «parent.document.referrer» на странице IFrame, но это не определено.

Я также попытался отобразить «$ _Server [referrer]» на странице IFrame и вернул родительский URL IFrame, но насколько легко кому-то манипулировать переменной referrer? Я не хочу получать вводящую в заблуждение информацию. Цель: я создал виджет и хочу, чтобы зарегистрированные пользователи могли использовать этот виджет на своем сайте. Я хочу, чтобы иметь возможность выяснить, кто использует виджет и если незарегистрированный пользователь использует его на своем сайте, то виджет не будет отображать

ответ

4

Попробуйте с:

parent.location.href; 

или

parent.document.URL 
+4

Это, казалось бы, только работать, если IFrame и его родителя являются на тот же домен. См. Http://stackoverflow.com/questions/815409/is-it-possible-to-find-a-cross-domain-iframes-new-url-after-a-redirect – fooquency

6

Я также попытался повторить «$ _SERVER [реферер]» на странице IFrame и что сделал вернуть IFrame родительский URL, но, как легко это для кому-то манипулировать реферером переменная?

Довольно легко, но так отключает JavaScript! Однако, если веб-сайт использует ваш , им будет немного сложно подделать реферера в их посетителя UA. (Они могут также проксировать ваш контент, если они действительно настаивают на том, чтобы скрыть тот факт, что они используют ваш контент. В этом случае ваш единственный выбор - не публиковать его в первую очередь.)

Чтобы представить контент для «партнеров», вы можете рассмотреть возможность предоставления им токена (например, API Twitter/Google/...). Если не используется (или недействительный) токен, введите ошибку. Если используется действительный токен, но реферер подозрительный, вам следует изучить его дальше.

+0

«... вам следует исследовать дальше «. - И отмените токен, если они еще не сотрудничают :) – jensgram

0

Небольшой кусочек JavaScript в IFrame-й странице может «не-кадр» страницу:

if (top != self) {top.location.replace(self.location.href);} 

Иначе, как @mck89 гласит: IFrame может получить доступ к URL родительской страницы с помощью top.location.href ,

Дальнейшее чтение по вопросу How to prevent my site page to be loaded via 3rd party site frame of iframe.

2

Вы можете использовать следующий PHP код, чтобы иметь окно URL родителя получают значения в массиве:

<?php 
     //Getting the parent window parameters 
     $getURLVar = str_replace("?","",strrchr($_SERVER['HTTP_REFERER'],"?")); 
     $getURLVar = str_replace("&","=",$getURLVar); 
     $getURLVar = str_getcsv($getURLVar,"="); 
     $i=0; 
     foreach ($getURLVar as $value) 
      { 
      if ($i % 2) 
       $value1[$i]=$value; 
      else 
       $value2[$i]=$value; 

      $i++; 
      } 
     $getURLVar =array_combine($value2,$value1); 


     print_r($getURLVar); 
    ?> 
0

Предполагая, что URL вашего виджета не делает никаких редиректов и т.д., вы должны быть в состоянии использовать :

document.referrer 

из javascript внутри вашего iframe и должен содержать URL-адрес родительской страницы. Это похоже на то, что YouTube делает для отслеживания в своих кодах встраивания iframe.

-1

Я хотел бы использовать:

$qStr = explode('?', $_SERVER['HTTP_REFERER']);   
$t= explode('&', $qStr[1]); 
foreach ($t as $val) 
{ 
    $a = explode('=', $val); 
    $args[$a[0]]=$a[1]; 
} 
// to check the arguments 
print_r($args); 
// to check the url 
echo $qStr[0]; 

$ арг будет содержать мой маркер безопасности, который будет проверяться некоторым хеширования против URL

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