2012-03-30 161 views
2

假设http://a.com/foo包含<iframe src="http://b.com/bar">防止IFRAME更改父位置

有时b.com/bar将打破其框架:顶层窗口将从a.com/foo远重定向到b.com/bar 。我不知道b.com如何做到这一点。

我认为这是不可能的跨域iframe干扰父母,除非父母通过postMessage合作。正在改变窗口的位置免除吗?

如果发生了这种情况,a.com如何防止此重定向?我控制a.com,但无法修改b.com。

如果这不是正在发生的事情,我如何才能找出b.com在做什么来实现重定向?

强制b.com将自己加载到一个新窗口或破坏其对topparent对象的访问是可以接受的。其他b.com行为的降级可能是可以接受的。

+0

[可能感兴趣的可能是这个经典问题](http://stackoverflow.com/questions/958997) – Pointy 2012-03-30 16:40:15

+0

有趣的是,尽管基本的反帧破坏204技巧在我的FF11中不起作用(所有的导航都离开了被阻止)。 – spraff 2012-03-30 16:58:39

+0

这个页面最终会赢。即使它不能破坏你的帧拦截器,它也可以决定隐藏自己或重定向到令人反感的东西。 – Pointy 2012-03-30 17:04:41

回答

0

可能发生的事情是b.com内部的链接具有属性Target ='_ parent'。 这将使窗口/ iframe父级更新。

如果您控制b.com - 确保您的所有目标都是_self。

0

如果我创建a.com/proxy.php ajax解决方案可以工作,它将使用cURL来获取b.com。

优点:

  • 可以更改或删除任何脚本
  • 可以调整b.com内容(预览模式)
  • 可以绕过跨域iframe的限制

缺点:

  • b.com上的cookies/sessions赢得' T为可用
  • b.com可能需要脚本来创建其内容的带宽
  • 编码的努力,使工作的HREF