注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

学会珍惜

You've been saying for the longest time

 
 
 

日志

 
 

IE下设置document.domain导致无法访问iframe的解决办法  

2013-01-08 16:36:26|  分类: 前端开发 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
转自:前端组

原文写于2012年6月11日

在涉及到跨域数据传输的时候如果不想用jsonp,我们通常要生成一个隐藏iframe,然后将数据放到iframe中的form中提交。正常情况下,我们会这样处理:

  1. var frame = document.createElement("iframe");  
  2. frame.style.display = "none";  
  3. document.body.appendChild(frame);  
  4. var frameDoc = frame.contentDocument || frame.contentWindow.document;  
  5. frameDoc.open();  
  6. frameDoc.write('写入你的form表单元素');  
  7. frameDoc.form[0].submit();  

这样我们就可以完成跨域数据的提交了。这看起来没有问题,可是悲催的如果ie下设置了document.domain,运行的你发现脚本会提示你拒绝访问。查阅资料可知ie中在父页面或在iframe页面中,只要设置了document.domain,无论是和当前域名相同还是根域名,均视为跨域。
怎么解决这个问题呢?直接看代码:

  1. var frame = document.createElement("iframe");  
  2. frame.style.display = "none";  
  3. frame.src = "javascript:void((function(){console.log(document);}()))";  
  4. document.body.appendChild(frame);  

运行下在控制台看看结果(注意console.log只有在ie7以上版本可其他现在浏览器运行),你会发现这里的document就指向你生成的iframe,如此你就可以设置iframe的document.domain和顶层页面相同,这样在外面就可以访问iframe了,或者把要生的标签和执行代码直接拼接到字符里面去也行。这样就完成了ie下面的iframe访问而且这种方法通吃,现代浏览器都支持。下面就贴上才写的一个书签采集工具:

请移步到此处查看示例


  评论这张
 
阅读(266)| 评论(0)
推荐

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017