`
- 浏览:
483742 次
- 性别:
- 来自:
北京
-
Ajax跨子域之document.domain+iframe实现
http://js8.in/443.html
Ajax跨域一直是个比较麻烦的问题,例如:断桥残雪在一个项目中使用了open打开一个跟父窗口不同域名的新页面,结果子窗口就不能传值给父窗口了;再如:我在www.2fool.cn下不可以获取love.2fool.cn域名下的页面内容。浏览器的跨域限制是为了安全,可是当我们想要在一个域名下请求另外一个域名的内容的时候就感觉不那么爽了。
我在WordPress天气插件、滔滔API接口处理上都使用了JSONP的方法来实现的跨域。而今天我要通过使用JS的document.domain和iframe来解决Ajax跨子域的问题。
原理
通过给主页面跟请求页面设置相同的document.domain来,欺骗浏览器,达到Ajax跨子域的效果,此方法在IE,chrome,Firefox,Safari,Opera下测试通过。
缺点:无法实现不同主域名之间的通讯。并且当在一个页面中还包含有其它的iframe时,会产生安全性异常,拒绝访问。
使用document.domain+iframe跨域实例
首先我们假设主页面地址为:http://js8.in/mywork/crossdomain/index.html,我们要加载的内容是位于work.2fool.cn域名下的helloworld.txt。我们需要在主页面中设置document.domain为2fool.cn,然后主页面添加一个iframe,src为域名work.2fool.cn下的一个url,在iframe页面中同样设置document.domain为2fool.cn,同时iframe中需要添加Ajax的函数,例如引入jQuery.js。
主页index.html的主要代码如下:
<button onclick="crossDomain();">开始跨域</button>
<div id="ajax"></div>
<iframe src="http://work.2fool.cn/crossdomain/iframe.html" id="iframe" style="display:none;">
</iframe>
<script type="text/javascript">
document.domain = '2fool.cn';
function crossDomain(){
var iframe=document.getElementById('iframe').contentWindow.$;
iframe.get("http://work.2fool.cn/crossdomain/helloworld.txt",function(data){
document.getElementById("ajax").innerHTML=data;
});
}
</script>
iframe页面主要代码如下:
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script type="text/javascript">
document.domain = '2fool.cn';
</script>
演示Demo
演示地址:http://js8.in/mywork/crossdomain/index.html
演示下载:http://js8.in/mywork/crossdomain/crossdomain.zip
二、IE中iframe和document.selection.createRange导致跨域
两层iframe,经过调试发现是document.selection.createRange导致的错误,在浏览器中报“拒绝访问”,猜测是跨域导致的。于是加上document.domain主域就搞定了。
本来以为是两层iframe导致的(因为他们反映一层iframe没有问题),于是自己建了个demo,test.qq.com/qq1.html代码如下:
<iframe src="http://demos.qq.com/qq2.html" frameborder="0" id="myIframe"></iframe>
demos.qq.com/qq2.html代码如下:
<script type="text/javascript">
//document.domain = 'qq.com';
var a = document.selection.createRange();
</script>
这样在IE9中访问test.qq.com/qq1.html就会报错,而把qq2.html和qq1.html都添加document.domain='qq.com';就可以了。
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
主要介绍了PHP ajax跨子域的解决方案之document.domain+iframe,结合实例形式分析了PHP ajax跨子域的解决方案document.domain+iframe的基本原理、实现方法与操作注意事项,需要的朋友可以参考下
第 7 章 漏洞利用207访问 http://www.evil.com/proxy/attack.htm// 设置域为 WebKit 认为的顶级域/*注入框架*
当然解决方案也有很多: 1.document.domain+iframe的设置,应用于主域相同而子域不同; 2.利用iframe和location.hash,数据直接暴露在了url中,数据容量和类型都有限 3.Flash LocalConnection, 对象可在一个 SWF ...
Windows 7系统创建子域的过程.docx
WINDOWS SERVER 2003从入门到精通之AD中的5种操作主机.mht WINDOWS SERVER 2003从入门到精通之DHCP...WINDOWS SERVER 2003从入门到精通之在AD中创建子域和域树.mht WINDOWS SERVER 2003从入门到精通之组策略应用.mht
:bullseye: :spider_web: :blue_book: 多处理(并行)子域检测脚本 :sparkles: :red_triangle_pointed_up: Sub.sh但没有API密钥 :red_triangle_pointed_down: ! , 和必须 :pushpin: :blue_book: :check_mark_...
跨子域单点登录。ASP.NET身份验证信息跨域共享状态,身份验证信息存储在cooKie中
windows service 2003,在AD中创建子域和域树
网络操作系统
subdomain-fu, 一种新的插件方法,尝试解决 Rails 项目中链接和路由的子域的使用 SubdomainFu SubdomainFu在 Rails 中提供子域处理的现代实现。 它从 account_location 。request_routing和它的他代码片段中提供了一...
本域和子域的交互,可以通过iframe设置两个域名document.domain = "s135.com",实现统一s135.com域下的跨域访问。 本域和其他域的交互,可以通过iframe、代理、JS创建动态脚本等几种方法来实现,这里有篇文章对...
解决跨子域网站之间的SESSION取值问题,简单实现,只需要改改配置文件就OK.
Linux DNS的负载均衡及子域委派-Linux.rar
简单的包装程序可以跨子域发出请求。 得到它 对于主持人: 对于网关域: -请参阅文件中的注释。 原料药 以下是用法示例。 假设您有两个要交流的域名 sub1.domain.com(主站) sub2.domain.com sub2.domain.com...
目录扫描+JS文件中提取URL和子域+403状态绕过+指纹识别
windows2012 域控环境及常规软件部署教程
实验:安装子域.doc
懂得自然懂 采用百度接口 子域名搜集器 但是有的资料我没币下载 太难了 可怜可怜