如何使用Jquery打破iframe并重定向页面

8
如何判断我的页面是否被iframe调用,并使用jQuery中断它?谢谢。
3个回答

12
if (self !== top)
    top.location.replace(self.location.href)

这就是如何跳出一个框架的方法


这会破坏 Facebook Canvas 页面框架吗? - Furkan Gözükara
我完全不知道,但只要它在物理框架或iframe中,它应该可以(从未接触过FB)。 - Joseph Marikle
好的,我至少会尝试一下。我将把这段 JavaScript 代码放在 head 标签关闭之前,这样它就能正常工作了,对吗? - Furkan Gözükara
@MonsterMMORPG 嗯...你可能需要先把它放在一个脚本标签中,像这样:<script type="text/javascript">if(self!==top)top.location.replace(self.location.href)</script> 这样应该就可以了。只需将其放在头标签中即可。 - Joseph Marikle

3

这可以通过纯JavaScript完成,因为toplocation都是附加到所有主要浏览器提供的全局window对象的对象。

if (top.location != location){
    location.href = 'http://google.com';
}

我知道你想要什么... 但实际上... 在检查位置和重定向之前,您不需要等待DOM加载... 因此,这并不是一个jQuery的版本 - Joseph Marikle
非常正确。我只是一直习惯于将所有内容都包裹在 $(document).ready(function(){}); 中,因为如果我一直这样做,我就不会忘记 :P - Joe
1
抱歉,这并不是一个有用的答案。将代码包裹在jquery文档准备好的部分中实际上只会使功能变得更糟,因为它会等待DOM加载后才切换页面,在重定向之前会在iframe内显示页面的闪烁。我理解这是基于习惯的无意义添加,但你的添加实际上恶化了功能,所以我给出-1分。 - Jimbo Jonny

2

如果您真的想要一个 JQuery 解决方案,这里是一个(跨浏览器,并且即使 $ 是作用域中的其他内容也可以正常工作):

(function($) { 

    if($(document) !== top)
    top.location.replace($(document).location.href)

})(jQuery);

即使使用原生JavaScript更容易实现,但是使用它是不必要的且过度的。


在那两个位置使用“jQuery”而不是“$”来考虑范围是否更好? - Jimbo Jonny

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