2010-08-30 68 views
1

有什麼辦法可以「爆發」iframe嗎?我的意思是人們會將我的JavaScript標籤放在iframe中(有時它最終會嵌套iframe,但現在只需要處理ONE)。我試圖收集某些信息,例如iframe位於頁面上的位置。當你不在iframe中混合使用offsetLeft/offsetTop/innerHeight/innerWidth時,很容易做到這一點,但我知道你不能(或不應該)能夠看到iframe之外的任何內容你在(假設不同的領域,它將是)。在iframe中訪問使用javascript的父頁面

有人對此有任何提示嗎?或者至少有任何我可以研究的資源?儘管我最終希望能夠訪問原始頁面的DOM,而在iframe中使用JS,但我知道這並不可行。現在我很樂意知道iframe在頁面上的位置。我不知道如果這些信息是DOM,或者瀏覽器屬性的一部分(我相信你仍然可以訪問?)

謝謝!

+0

如果你想要某些信息(例如位置),那麼你可以做出這樣的要求,提供內容回您的客戶。給他們舉例說明如何調用你的內容(提供助手JS等)。並且您的頁面可以使用信息或將錯誤內容返回給調用者。 – 2010-08-30 15:42:02

+0

是的,不幸的是,有時候我的標籤會在很多人之間傳遞,添加到其他系統中,並在另一端吐出等等。所以我不能執行規則。 你能訪問你最終頁面的URL嗎?即使你嵌套在一個或多個iframe中?或者這仍然違背安全政策... – Brad 2010-08-30 15:55:35

回答

3

簡短的回答是否定的。

更長的答案是,與CORS和跨框架/域消息,你現在比以前更好。但是如果你嘗試訪問另一個域的父框架中的DOM,你會得到一個胖子「ACCESS DENIED」。

如果你在父母身上放置了一些可以載入像在你的服務器上設置cookie的圖像的東西,那麼是的。但我想這不是你的意思

這裏是你如何能得到原點的例子 - 有你的iframe的用戶加載這樣的:

<script type="text/javascript"> 
    document.write('<script src="yourIframeLoader.php?parent='+escape(location.href)+'"><\/script>'); 
    </script> 
+0

是的,這就是我害怕的。我現在將更多地研究跨框架/域消息傳遞,看看_might_能否幫助我,但我懷疑它。我遇到的最大問題是,我完全無法控制最終結果。所以會有不同的域,我不能添加任何額外的JS來加載圖像/ cookies,什麼都沒有。 你能至少看到你最終在哪個域上?如果您使用的是一個或多個iframe,您是否可以訪問/查看最終的網頁? – Brad 2010-08-30 15:37:04

+0

如果父域名所有者沒有在他的頁面上添加額外的腳本,那麼你現在AFAIK完全沒有運氣。 如果你可以讓這個人添加一些片段,那麼你可以做的東西。查看我的答案的例子 – mplungjan 2010-08-30 15:50:30

1

這不起作用交叉域。這是保持javascript在域之間工作的主要安全特性(它被稱爲同源策略)。

想象一下,你開始在一些邪惡的網站:www.evil.com。從那裏,不知何故,他們誘使你點擊一個鏈接,你期望帶你到一個敏感的網站(貝寶,你的銀行,無論)。儘管實際上並沒有將您發送到該網站,但他們實際上已將其嵌入。您繼續並登錄。BAM。

如果他們的劇本已經獲得了跨域iframe的DOM,他們可以很容易抽絲任何你通過日誌傳遞形式的數據。討厭,呃?這裏還有沒有辦法安全地解決這個問題,所以它的關閉(不,可以說,JSONP)通過調用parent.Myfunction();

0

你總是可以實現父頁面上的一些JavaScript函數,並從iframe中調用它們至於確定iframe的位置,我不確定那個。

0

雖然iFrame無法直接更改其父項,但父項可以從iFrame讀取數據。

這意味着父HTML頁面可以使用JS來查看子iFrame中的數據。

如果你控制了雙方家長和iFrame內容的,那麼你就可以設置消息從iFrame的父經過商定元素ID中的iFrame。

相關問題