我正在创建一个可以加载到IFrame中的小部件,用户可以将小部件放在他们自己的网站上。我如何获得在javascript和/或PHP中使用IFrame的网站的URL? IFrame加载一个php文件。
我在IFrame页面尝试了“parent.top.location.href”和“parent.document.referrer”,但这是未定义的。
我还尝试在IFrame页面中回显“$ _Server [referrer]”并确实返回了IFrame父URL,但是有人操作referrer变量有多容易?我不想得到误导性的信息。 目标:我创建了一个小部件,并希望允许注册用户在其网站上使用该小部件。我希望能够找出谁正在使用小部件,如果未注册的用户在他们的网站上使用它,那么小部件将不会显示
答案 0 :(得分:6)
我也试着回应 IFrame中的“$ _Server [referrer]” 页面,确实返回了IFrame 父网址,但它有多容易 某人操纵推荐人 变量?
非常简单,但禁用JavaScript也是如此!但是,如果某个网站使用您的<iframe>
,那么他们在他们的访问者的UA中伪造推荐人将会有点困难。 (如果他们真的坚持隐瞒他们正在使用您的内容这一事实,他们也可以代理您的内容。在这种情况下,您唯一的选择就是不首先发布它。)
为了向“合作伙伴”提供内容,您可以考虑向他们提供令牌(如Twitter / Google / ... API)。如果未使用(或无效)令牌,则显示错误。如果使用了有效令牌,但推荐人有疑问,则应进一步调查。
答案 1 :(得分:4)
尝试:
parent.location.href;
或
parent.document.URL
答案 2 :(得分: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);
?>
答案 3 :(得分:0)
iframe-d页面中的一小段JavaScript可以“取消框架”页面:
if (top != self) {top.location.replace(self.location.href);}
否则,正如@mck89所述:iframe可以使用top.location.href
访问父网页的网址。
进一步阅读问题How to prevent my site page to be loaded via 3rd party site frame of iframe。
答案 4 :(得分:0)
假设您的小部件的网址没有进行任何重定向等,您应该可以使用:
document.referrer
来自iframe中的javascript,它应该包含父页面的URL。这似乎是YouTube用于跟踪iframe嵌入代码的内容。
答案 5 :(得分:-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];
$ args将包含我的安全令牌,该令牌将通过针对URL的某些散列进行检查