2016-08-26 78 views
0

我有一個頁面,打開一個子窗口(有iframe),並從新的頁面,我打電話給家長函數將一些值從子窗口傳遞給父窗口。 子窗口代碼:JavaScript的跨域PostMessage不工作

window.opener.ParentFunction(sendvalues); 

由於兩者在同一個域(example.com)它是爲我工作的罰款。 現在由於一些改變,我需要將我的子窗口移動到一個新域(new.example.com)。我也沒有獲得拒絕否認錯誤。

爲了解決這個問題,我使用PostMessage。

子窗口代碼:

window.parent.postMessage(sendvalues,"*"); 

父代碼:

var eventMethod = window.addEventListener ? "addEventListener" : "attachEvent"; 

var eventer = window[eventMethod];  

var messageEvent = eventMethod == "attachEvent" ? "onmessage" : "message"; 


eventer(messageEvent, function (e) { 
//for debug  
alert(e.data); 

ParentFunction(e.data); 

}, false); 

這不是爲我工作,我沒有得到任何價值。沒有錯誤,沒有任何事情發生。 代碼沒有得到執行eventer方法。我沒有得到任何警報。

任何幫助,非常感謝。

+0

我剛剛看到你對postMessage的用法 - 你能否詳細說明... –

+0

@Jaromanda X ..你在找什麼細節..好像是代碼eventer函數根本沒有被調用......我沒有收到任何警報,我補充說。 – SamM

+0

@Jaromanda X:所以我需要從父窗口發送PostMessage到popwindow以及在我的情況下,它不是必需的,因爲我使用查詢字符串傳遞所有值,但是從Child我想要使用Postmessage傳遞值。可以使用「event.source.postMessage」 – SamM

回答

0

基於新的信息,你應該叫:

如果孩子和iframe在同一域中

window.parent.opener.postMessage 

如果家長和孩子都在同一域和iframe不是,iframe可能需要調用

window.parent.postMessage 

然後,子窗口應該傾聽和使用

window.opener.postMessage 

雖然,你仍然可以嘗試window.parent.opener.postMessage在這種情況下對消息傳遞給父 - 我我不會爲你測試所有的東西;)

+0

這應該在Firefox(和其他瀏覽器)中正​​常工作 – Anne

+0

@Jaromanda X:我嘗試了你的建議,Post從父母以及孩子的消息,但它不是爲我工作 – SamM

+0

在子窗口中,我需要發送數據父按鈕單擊。 – SamM