0

我在下面有这个脚本,它确实可以防止 iFrame 被破坏,但它也会杀死我页面上的每个链接。如何防止脚本禁用我的所有链接?

<script>
    var prevent_bust = 0  
    window.onbeforeunload = function() { prevent_bust++ }  
    setInterval(function() {  
        if (prevent_bust > 0) {  
            prevent_bust -= 2  
            // 204 header response prevents redirect
            window.top.location = '/204-response'  
        }  
    }, 1)  
</script>

我遇到的问题与此处描述的完全一样:http ://slightlyparanoid.com/?p=11

4

2 回答 2

1

编辑:您使用这种方法来进行框架破坏是否有原因?普遍接受的方法是 compare self === top,我非常怀疑这会破坏任何锚标签:

if (self !== top) {
    // this script is running in an iframe
} else {
    // this script is not running in an iframe
}

这很可能会影响 IE(文档):

  • 单击引用另一个文档的锚点。
  • 调用 anchor.click 方法。

要允许onbeforeunload事件继续而不干扰锚标记点击,您必须从中返回undefined

window.onbeforeunload = function() { 
    prevent_bust++; 
    return undefined; 
};

澄清一下,onbeforeunload期望从处理程序返回一个字符串,然后将其放入确认框中。如果你 return undefined,它会绕过这个并继续unload事件。

于 2012-07-27T18:19:05.217 回答
0

截至目前,禁用帧破坏的最佳方法是沙盒,但正如您在测试中可能发现的那样,
这种方法有一些缺点。

但是,204 代码会禁用所有浏览器导航(所有链接、后退、前进等)。
然而,一些浏览器重新设置了后退和前进按钮,但仍然没有链接导航,因此将其应用于您的代码可能不是最好的主意,您是否尝试将“/204-response”添加到
iframe 源(src 属性)?

帧破坏是跨域嵌入的一个问题......但就像我说的沙盒规则只在一定程度上有效。

所以试试沙盒属性,让我们知道它是如何工作的!
(显然,这种类型的事情是针对每种情况的,但这是一个很好的通用方法。)

于 2018-10-25T05:43:50.607 回答