2009-10-02 14 views
7

因此,我知道如果我將iFrame包含到不在同一個域中的頁面,我無法通過瀏覽器策略訪問該iframe的DOM,但iframe中的頁面是否可以執行任何類型的父文檔訪問?iframe頁面可以告訴他們何時進行iframed?

具體來說,我不得不說是偶然在這個問題上的想法:

  1. 如果嵌入頁面可以告訴大家,它不是父窗口,一個可以讓任何網站,是聯合國的iframe能夠使如果頁面檢測到它被iframed更改爲「Go Away」頁面,或者您只能將其設置爲iframe(類似於僅包含頁面的服務器端腳本),以便當它不是iframed的頁面會得到一個「Go Away」頁面。

  2. 如果iframed網頁上有一定的自由父窗口不,它可以請求父窗口的樣式表,並把它作爲其上的樣式表,從而使該網站集成更多與父文檔。 (當然,那麼我可以讓我的樣式表與iframed網站更相關,知道它會這樣做,但我不認爲這是一個問題)。

有人知道嗎?

回答

11

至於#1,是的,你可以告訴你,如果正在使用一些簡單的JavaScript框架:

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

關於#2,我不知道,你可以使用「頂」做什麼可變的,但我知道你可以改變它的位置(所以如果你的網站是由另一個網站構成的,你可以讓你的框架改變頂部框架的位置 - 基本上是將用戶直接重定向到你的網站)。

不知道你還可以或不能對頂部框架做些什麼 - 雖然別人可能能夠提供更多的信息。

+2

我建議開溝腳本元素中的HTML註釋,有不再需要爲Netscape 2提供服務。 – Quentin 2009-10-02 13:30:06

+0

@大衛 - 好的,好的,舊的習慣會死硬:) – 2009-10-02 13:32:19

1

這可能是通過嵌入以下頁面的JavaScript:

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

你可以有這個JavaScript作爲網站模板的一部分,並防止任何網頁被顯示在IFrame的

0

我已經做了這之前,它已經工作:

<script type="text/javascript"> 
if (window.parent != null) 
{ 
    // Framed! 
} 
</script> 
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

舊帖子,但是我以爲我會添加一個觀察。雖然您可以防止「剔除」iframe,但是當檢測到iframing時,您可以隨時更改頁面內容,以顯示諸如「此頁面已被劫持的錯誤消息」。您沒有在正版網站上訪問此頁面請訪問xyz.com/...閱讀文章。「 – Endophage 2011-04-28 18:42:10

相關問題