尝试使用postMessage从iFrame中检索对象时遇到问题。基本上,我有一个iFrame,我被迫用来命中SAML身份验证端点。 SAML端点将javascript对象返回给iFrame,然后iFrame将该对象作为parent.postMessage
事件的一部分发送到父窗口:
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 :(得分:4)
支持postMessage()
的旧版Internet Explorer根本不支持通过该接口进行对象序列化。即使是旧版本的Firefox也不支持,但是因为独立的浏览器倾向于积极地更新自己,这不是一个实际问题。
如果您正在处理假定它可以使用postMessage()
来传输对象的代码,那么它在IE10之前就无法在IE中运行。