7

所以我知道,如果我将 iFrame 包含到不在同一个域中的页面中,我将无法通过浏览器策略访问该 iframe 的 DOM,但是 iframe 中的页面可以访问任何类型的父文档吗?

具体来说,我必须根据这个问题提出想法:

  1. 如果嵌入页面可以判断它不是父窗口,则可以将任一站点设为不支持 iframe 的站点,以便如果页面检测到它是 iframe 的,它会更改为“离开”页面,或者您可以只制作它-iframe-able (类似于仅用于包含的页面的服务器端脚本),以便在没有 iframe 时访问该页面将获得“Go Away”页面。

  2. 如果 iframed 页面具有父窗口所没有的某些自由,它可以请求父窗口的样式表并将其设置为它的样式表,从而使站点更多地与父文档集成。(当然,我可以让我的样式表更多地与 iframed 站点相关,我知道它会这样做,但我不认为这是一个问题)。

有人知道吗?

4

4 回答 4

11

关于#1,是的,您可以使用一些简单的javascript判断您是否被陷害:

<script type="text/javascript">
if (self != top)
{
  // Framed!
}
</script>

关于#2,我不确定你可以使用“top”变量做什么,但我知道你可以改变它的位置(所以如果你的网站被另一个网站框住,你可以让你的框架改变位置顶部框架 - 本质上是将用户直接重定向到您的网站)。

不过,不确定您还能对顶部框架做什么或不能做什么 - 其他人可能能够在那里提供更多信息。

于 2009-10-02T13:25:46.277 回答
4

您可能还对这篇关于检测帧的Coding Horror 文章感兴趣。您可以检测您是否被陷害,但“父”页面也可以采取对策来阻止您采取行动。文章中的示例:

检测你是否被陷害:

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)  
于 2009-10-02T13:37:43.630 回答
1

这可以通过在页面中嵌入以下 JavaScript 来实现:

if(top.location.href != self.location){
//do redirection or display message
}

您可以将此 Javascript 作为网站模板的一部分,并防止任何页面显示在 IFrame 中

于 2009-10-02T13:28:37.607 回答
0

我以前做过这个,它已经奏效了:

<script type="text/javascript">
if (window.parent != null)
{
  // Framed!
}
</script>
于 2009-10-02T13:33:00.840 回答