我在下面有这个脚本,这可以防止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
答案 0 :(得分:1)
编辑:你有没有理由使用这种方法来制作框架?普遍接受的方法是比较self === top
,我非常怀疑会破坏任何锚标记:
if (self !== top) {
// this script is running in an iframe
} else {
// this script is not running in an iframe
}
这很可能影响IE(docs):
要允许onbeforeunload
事件继续而不干扰锚标记点击,您必须从中返回undefined
。
window.onbeforeunload = function() {
prevent_bust++;
return undefined;
};
为了澄清,onbeforeunload
期望一个字符串从处理程序返回,然后它将在一个确认框中抛出。如果您返回undefined
,则会绕过此值并继续unload
事件。
答案 1 :(得分:0)
到目前为止,禁用帧无效的最佳方法是sandbox,但您可能会在测试中发现
这种方法有一些缺点。
但是,204代码会禁用所有浏览器导航(所有链接,后退,前进等)。
但是,某些浏览器
已经恢复了前进和后退按钮,但仍然没有链接导航,因此将其应用于代码可能不是最好的主意,您是否尝试过将'/ 204-response'添加到
iframes源(src属性)?
在这里,跨框架嵌入是一个问题,但是像我说的那样,沙盒规则只能在一定程度上起作用。
因此,让sandbox属性生效,让我们知道它的工作原理!
(显然,这种情况是特定于每种情况的,但这是一种很好的通用方法。)