Javascript-iFrame parent.postMessage返回字符串,而不是IE9中的对象
作者:互联网
尝试使用postMessage从iFrame检索对象时遇到问题.本质上,我不得不使用iFrame来攻击SAML身份验证端点. SAML端点将javascript对象返回到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对象作为json字符串发送,或者让iFrame包含一些polyfill等).所以我的问题是,我没有选择权了吗?谁能想到一个适合自己的创意技巧?
谢谢!
解决方法:
支持postMessage()的旧版Internet Explorer根本不支持通过接口进行对象序列化.即使是较旧的Firefox版本也不支持该功能,但是由于独立的浏览器会主动进行自我更新,因此这并不是实际问题.
如果您要处理的代码假定它可以使用postMessage()来传输对象,则它在IE10之前的IE中将无法使用.
标签:iframe,internet-explorer-9,javascript 来源: https://codeday.me/bug/20191029/1962822.html