iframe页面是否可以判断何时进行iframe?
所以我知道,如果我将一个iFrame包含到一个不在同一个域中的页面中,我无法通过浏览器策略访问该iFrame的DOM,但是一个iFrame中的页面可以进行任何类型的父文档访问吗 具体地说,我必须提出一些取决于这个问题的想法:iframe页面是否可以判断何时进行iframe?,iframe,same-origin-policy,Iframe,Same Origin Policy,所以我知道,如果我将一个iFrame包含到一个不在同一个域中的页面中,我无法通过浏览器策略访问该iFrame的DOM,但是一个iFrame中的页面可以进行任何类型的父文档访问吗 具体地说,我必须提出一些取决于这个问题的想法: 如果嵌入的页面可以判断它不是父窗口,则可以使不可iframe的站点成为可iframe,这样,如果页面检测到它已被iframe,它将更改为“离开”页面,或者您可以使其仅可iframe(类似于仅用于包含的页面的服务器端脚本),因此,在未设置框架的情况下访问页面将得到一个“离开”
<script type="text/javascript">
if (self != top)
{
// Framed!
}
</script>
如果(自我!=顶部)
{
//陷害!
}
关于#2,我不确定您可以使用“top”变量做什么,但我知道您可以更改它的位置(因此,如果您的站点被另一个站点设置框架,您可以让您的框架更改顶部框架的位置-本质上是将用户直接重定向到您的站点)
不确定您还可以或不能对顶部框架做什么-其他人可能可以在那里提供更多信息。这可以通过在页面中嵌入以下JavaScript实现:
if(top.location.href != self.location){
//do redirection or display message
}
您可以将此Javascript作为网站模板的一部分,并防止任何页面显示在IFrame中,我以前已经这样做过,它已经起到了作用:
<script type="text/javascript">
if (window.parent != null)
{
// Framed!
}
</script>
如果(window.parent!=null)
{
//陷害!
}
您可能还对检测帧感兴趣。你可以检测你是否被陷害,但是“家长”页面也可以采取一些对策来阻止你这样做。文章中的示例:
检测您是否被陷害:
if (parent.frames.length > 0) {
top.location.replace(document.location);
}
防止帧检测和重定向:
var prevent_bust = 0
window.onbeforeunload = function() { prevent_bust++ }
setInterval(function() {
if (prevent_bust > 0) {
prevent_bust -= 2
window.top.location = 'http://server-which-responds-with-204.com'
}
}, 1)
我建议放弃脚本元素中的HTML注释,再迎合Netscape 2也没有意义了。@David-好吧,好吧,老习惯难改:)老帖子,但我想添加一个观察。虽然可以防止您“破坏”iframe,但当检测到iframe时,您始终可以更改页面内容,以显示一些错误消息,如“此页面已被劫持。您不是在正版网站上访问此页面,请访问xyz.com/…阅读本文。”