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

Aramey

前端开发

 
 
 

日志

 
 
 
 

[Java教程]IE 判断是否设置 document.domain  

2014-01-14 17:49:36|  分类: 前端开发 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

众所周知,对于同主域的多个子域名,可以通过设置 document.domain 来绕过同源策略(安全性极差,强烈反对这么做)

在我们的 JS 程序里,需要创建一个空白的 iframe(src="about:blank") 来做数据代理。

如果没有设置过 document.domain,这个 iframe 是可以随意访问的,没有问题。

但我们的 JS 程序部署在第三方页面,是否设置了 document.domain 是未知的,IE下只要设置了 document.domain,访问这个 iframe 就会提示“没有权限”了。(Firefox 和 Chrome 等非 IE 浏览器,都是没有这个问题的。)

所以,需要检测一下页面是否设置了 document.domain,并修复这个问题。

对于 test.weibo.com 设置 document.domain = "weibo.com"; 的情况,应该是很好判断了,只需判断 document.domain 和 window.location.host 是否相等即可。

但,如果是 test.weibo.com 设置 document.domain = "test.weibo.com"; 的就麻烦了。(各位看官,不要以为没人这样子做,谁知道呢)

解决的办法如下: 如果是 IE,就试着取一下 iframe 的 document 属性,如果 try catch 捕获到异常,就表示 A 页面设置了 document.domain,做一下修正。

document.domain = 'weibo.com';var ifm = document.createElement('iframe');ifm.src = "about:blank";document.body.appendChild(ifm);if(/msie/i.test(navigator.userAgent)){	try{		ifm.contentWindow.document.title;	}catch(e){	addEvent(ifm, "load", function () {		alert(ifm.contentWindow.document.body.innerHTML);		ifm.onload = null;	});	ifm.src = "javascript:void((function(){var d=document;d.open();d.domain='"+		document.domain + "';d.write('111111111');d.close()})())";	}}

同步发表在:http://ming.sinaapp.com/?p=186
  评论这张
 
阅读(376)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

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

页脚

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