无意中用IE9打开了邮箱项目(凡科邮箱),点击写信,发现富文本编辑器出不来,报错了。最后发现是跨域导致,IE10和9都会,这两个核对于iframe的同源判定策略有点坑爹,不按套路来。先说问题和解决方法。
问题: 报错如下,动态创建iframe后,获取其document时“拒绝访问”,应该就是跨域了。
分析: 这个iframe只是个容器,没有给它src(所以iframe的document.domain可能有问题)。跨域最先想到的就是给iframe的document.domain设置和父页面相同。
然而这里获取其document就已经被拒绝,根本无法通过document.domain设置。
解决: 用一种“旁门左道”来解决。你不是没有src嘛?又不能随便给你设置src(iframe会发生跳转,内容改变),那就通过src让你执行一下js来设置domain,代码如下:
iframe.src = "javascript:void((function(){document.open();document.domain='"+ document.doma