2014-03-05 41 views
3

我嘗試使用postMessage從iFrame中檢索對象時遇到問題。基本上,我有一個iFrame,我被迫用來擊中SAML身份驗證端點。該SAML端點返回javascript對象到所述iFrame,其接着發送該對象到父窗口作爲parent.postMessage事件的一部分:iFrame parent.postMessage在IE9中返回字符串而不是對象

parent.postMessage(authResponse,"*"); 

在Chrome和IE的較新版本,父窗口事件偵聽器碰壁對象只是很好,我們正在運行。但是,在IE 9中,iFrame不發送對象,它發送一個字符串,如"[Object object]"

所以當然代碼試圖引用對象屬性如authResponse.token失敗。我已經看了docs for postMessage,我看你怎麼可以detect whether your browser will send an object or a string。我也相信我不能只是look at the contents of the iFrame,因爲它的確是跨域的。

我無法控制iFrame的內容(將auth objectsent作爲json字符串,或者讓iFrame包含一些polyfill等)。所以我的問題是,我沒有選擇?任何人都可以想到可能適合的創意黑客?

謝謝!

+0

如果代碼期望IE8和9將接受一個對象作爲'postMessage()'的參數,那麼它就會被破壞。那些瀏覽器根本就不會那樣做。 – Pointy

+0

@有點我相信你是對的,我沒有想過解決這個問題。如果您想發佈答案,我會接受!謝謝。 – tengen

回答

4

舊版本的Internet Explorer支持postMessage()根本不支持通過接口進行對象序列化。甚至Firefox的舊版本也不支持,但是因爲獨立瀏覽器傾向於更新自己,這不是一個實際的問題。

如果您正在處理的代碼假定它可以使用postMessage()來傳輸對象,那麼它在IE10之前就不會在IE中工作。

相關問題