所以我知道,如果我将iFrame包含在不在同一个域的页面上,我就无法通过浏览器策略访问iframe的DOM,但是iframe中的页面可以进行任何类型的父文档访问?
具体而言,我必须根据这个问题提出想法:
如果嵌入页面可以告诉它不是父窗口,那么可以创建任何非iframe的站点,这样如果页面检测到它是iframed,它就会变为“Go Away”页面或者你可以使它只有iframe-able(类似于服务器端脚本只适用于包含的页面),所以当它没有iframed时进入页面会得到一个“Go Away”页面。
如果iframed页面具有父窗口没有的某些自由,它可以请求父窗口的样式表并将其设置为样式表上的样式表,从而使站点与父文档集成更多。 (当然,我可以让我的样式表更多地与iframed网站有关,知道它会做到这一点,但我不认为这是一个问题。)
有人知道吗?
答案 0 :(得分:11)
关于#1,是的,您可以使用一些简单的javascript来判断您是否正在构建框架:
<script type="text/javascript">
if (self != top)
{
// Framed!
}
</script>
关于#2,我不确定你可以使用“top”变量做什么,但我知道你可以改变它的位置(所以如果你的网站被另一个网站框起来,你可以改变你的框架顶部框架的位置 - 基本上将用户直接重定向到您的站点)。
不确定您可以或不能对顶部框架做什么 - 其他人可能会在那里提供更多信息。
答案 1 :(得分:4)
您可能也会对this Coding Horror article感兴趣检测帧。您可以检测是否已经陷害,但也有“父”页面可以采取的对策,以防止您对此采取行动。文章中的例子:
检测你是否被诬陷:
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)
答案 2 :(得分:1)
这可以通过在页面中嵌入以下JavaScript来实现:
if(top.location.href != self.location){
//do redirection or display message
}
您可以将此Javascript作为网站模板的一部分,并阻止任何网页在IFrame中显示
答案 3 :(得分:0)
之前我已经完成了这项工作,并且已经有效:
<script type="text/javascript">
if (window.parent != null)
{
// Framed!
}
</script>