2011-09-27 128 views
1

可能重複:
access parent url from iframe訪問IFrame的父URL

我一直在四處尋找,但無法找到一組答案或解決方案這一點。 我有2個網站,www2.domain.netwww3.domain.net這兩個網站對他們有一個鏈接到www.domain.co.uk/iframe.html

我想要做的是檢查父URL,即一個iFrame - 在用戶訪問www2.domain.netwww3.domain.net這樣我就可以顯示特定信息只是訪問www3.domain.net的人。

這可能嗎?

感謝, 安德魯

回答

0

它不是。 iframe被認爲是框架,因此跨域策略適用於它們。由於iframe域(www.domain.co.uk/iframe.html)與父域(www3.domain.net)不同,因此無法訪問父域。然而,我相信您仍然可以通過DOM或通過window.frames(包括iframe在內的所有框架的數組)訪問來自父域的iframe。

-1

由於Same Origin Policy,在這種情況下不可能發佈(和發佈一樣)。但是,您似乎控制了所有這些域。如果是這樣,您可以使用查詢字符串在iFrame標記的src屬性中傳遞父域,然後在iFrame頁面中訪問它。請參閱@ Andy的實施答案。

+0

如果你在同一個域中 – Mohsen

+0

HTTP這是可能的:然後在另一端解析這個// jsfiddle.net/w Xrgx/2/ – Mohsen

+1

@Mohsen,OP已經明確提到了所有的領域。主機頁面和iframe的域名不同,因此iframe **不能**讀取父級的位置。 –

1

這是可能的,但不是非常簡單,並且要求您可以控制涉及的所有三個頁面。

如果你控制所有三個網站都有跨窗口消息傳遞,由window.postMessage()提供。然而,這是(相對)新增加的DOM和不支持在舊的瀏覽器等IE 7,IE 6,Safari瀏覽器4,Firefox 2和歌劇9.

// Parent: 
iframeWin.postMessage("Hello, from "+window.location.host); 


// Iframe: 
window.onmessage = function (evt) { alert(evt.origin); } 

另一種選擇是經由URL來傳遞域

<iframe src="www.domain.co.uk/iframe.html?www2.domain.net" /> 

和所需的JavaScript(從頁面調用的iframe內):

alert(window.location.search); 
//-> "?www2.domain.net" 
+0

很多瀏覽器都不支持這個功能 – Mohsen

+0

http://caniuse.com/#search=cross-document messaging – Mohsen

+0

@Mohsen:我的大腦錯過了答案中的兩個字,現在已經修復了。當你說「這個」時,你似乎指的是整個答案。我的答案的最後一部分可以在任何瀏覽器**中實現。 –