2011-08-02 34 views
3

父頁面可以獲取iframe的URL(和片段),但在iframe更新其URL片段後,父級無法獲取帶有片段的更新URL。獲取來自其他域的內嵌框架完整url

例iframe網址: http://example.com/a/b/c/d.html?k1=v1#i1=j1(注片段)

這是在交叉域環境。父域與iframe域不同。目前只使用Firefox進行測試。

使用下面的代碼:

var ifr = document.getElementById('myiframe'); 
if(ifr){ 
    alert(ifr.src); 
} 

是不可能由於安全?

我試圖讓iframe與使用片段作爲有效載荷的父級通信。

這兩個域都在我的控制之下,我試圖避免在頁面之間實現通信的漫長方式。

是否有任何其他技術不涉及服務器往返?

+2

您可以用['window.postMessage'](https://developer.mozilla.org/en/DOM/ window.postMessage)? –

+0

@Digital Plane我認爲你應該發表一個答案;) – zaf

回答

1

通過在任何window對象上調用postMessage可以使用window.postMessage API在幀之間進行通信。只要接收幀有一個message事件偵聽器,它就可以用於跨域消息傳遞。

postMessage的使用方法:

otherWindow.postMessage(message, targetOrigin); 
//e.g. 
yourIFrame.contentWindow.postMessage({curURL: location.href}, "http://www.your2ndDomain.com"); 
//or 
top.postMessage({curURL: location.href}, "http://www.your1stDomain.com"); 

來監聽消息:

window.addEventListener("message", function(e){ 
    //You must check your origin! 
    if(event.origin !== "http://www.your1stDomain.com") 
    return; 
    //Get the data 
    var data = event.data; 
    alert(data.curURL); 
}, false); 
+0

而且,這很好。不知道它是如何跨平臺,但現在我主要關心的是Firefox。乾杯! – zaf