iFrame parent.postMessage在IE9中返回字符串而不是对象

时间:2014-03-05 17:42:32

标签: javascript iframe internet-explorer-9

尝试使用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等)。所以我的问题是,我没有选择吗?任何人都可以想到一个可能适合的创意黑客吗?

谢谢!

1 个答案:

答案 0 :(得分:4)

支持postMessage()的旧版Internet Explorer根本不支持通过该接口进行对象序列化。即使是旧版本的Firefox也不支持,但是因为独立的浏览器倾向于积极地更新自己,这不是一个实际问题。

如果您正在处理假定它可以使用postMessage()来传输对象的代码,那么它在IE10之前就无法在IE中运行。