从iframe更改顶层窗口位置

4

你好,我希望使用PHP和JavaScript将我的Facebook应用页面重定向到另一个应用页面。

我已经

echo "<script type='text/javascript'>
if(window.top.location.href.toLowerCase().indexOf('http://apps.facebook.com/app1/') != -1) {
    window.top.location.href = 'http://apps.facebook.com/app2/2/';
    alert("Done");
}
else
   alert(window.top.location.href); 
</script>";

但我遇到了一个错误: 不安全的JavaScript尝试访问带有网址http://apps.facebook.com/myapp/?ref=bookmarks的框架,该框架来自带有网址http://mydomain.com/?ref=bookmarks的框架。域、协议和端口必须匹配。 在Facebook应用iFrame中重定向是否可能没有任何问题?

1
我认为你可以重定向,但是你无法检查顶层窗口的URL。但我认为你可以检查document.referrer。 - Karolis
1个回答

6
由于 XSS 限制,如果你的 iframe 存在于调用 iframe 的页面不同域名的情况下,你可以设置但无法读取 top.location.href。如果你要重定向的页面和当前页面具有相同的域名,你就可以检查 top.location.href。因此,你的代码逻辑应该被反转,首先检查它是否能够访问 top.location.href,如果不能,就进行重定向。将它放入 try..catch 块中以避免在访问 top.location 时产生 javascript 错误。

3
@pXdty:XSS = http://en.wikipedia.org/wiki/Cross-site_scripting,他所提到的限制被称为同源策略,http://en.wikipedia.org/wiki/Same_origin_policy。 - CBroe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接