- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
JS跨域问题详解要点
javascript跨域访问是web开发者经常遇到的问题,什么是跨域,一个域上加载的脚本获取或操作另一个域上的文档属性,下面将列出三种实现javascript跨域方法: 1.基于iframe实现跨域
???? 基于iframe实现的跨域要求两个域具有,这种特点,也就是两个页面必须属于一个基础域(例如都是,或是),使用同一协议(例如都是 http)和同一端口(例如都是80),这样在两个页面中同时添加document.domain,就可以实现父页面调用子页面的函数,代码如下: 页面一: Html代码?
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 html
head
?script
?document.domain = ;
?function aa(){
??alert(p);
?}
?/script
/head
body
?iframe src=http://localhost:8080/CmsUI/2.html id=i
?/iframe
?script
?document.getElementById(i).onload = function(){
??var d = document.getElementById(i).contentWindow;
??d.a();
?};
?/script
?/body
/html 页面二:
Html代码?
?
1
2
3
4
5
6
7
8
9
10
11
12 html
?head
?script
?document.domain = ;
?function a(){
?alert(c);
??}
?/script
?/head
?body
?/body
/html 这时候父页面就可以调用子页面的a函数,实现js跨域访问
2.基于script标签实现跨域
???? script标签本身就可以访问其它域的资源,不受浏览器同源策略的限制,可以通过在页面动态创建script标签,代码如下:
Java代码?
?
1
2
3 var script = document.createElement(script);
script.src = /js/*.js;
document.body.appendChild(script); ???? 这样通过动态创建script标签就可以加载其它域的js文件,然后通过本页面就可以调用加载后js文件的函数,这样做的缺陷就是不能加载其它域的文档,只能是js文件,jsonp便是通过这种方式实现的,jsonp通过向其它域传入一个callback参数,通过其他域的后台将callback参数值和json串包装成javascript函数返回,因为是通过script标签发出的请求,浏览器会将返回来的字符串按照javascript进行解析执行,实现了域与域之间的数据传输。 jquery中对jsonp的支持也是基于此方案。
3.后台代理方式
???? 这种方式可以解决所有跨域问题,也就是将后台作为代理,每次对其它域的请求转交给本域的后台,本域的后台通过模拟http请求去访问其它域,再将返回的结果返回给前台,这样做的好处是,无论访问的是文档,还是js文件都可以实现跨域。
下表给出了相对/dir/page.html同源检测的结果:
?
要解决跨域的问题,我们可以使用以下几种方法:
一、通过jsonp跨域
在js中,我们直接用XMLHttpRequest请求不同域上的数据时,是不可以的。但是,在页面上引入不同域上的js脚本文件却是可以的,jsonp正是利用这个特性来实现的。
比如,有个a.html页面,它里面的代码需要利用ajax获取一个不同域上的json数据,假设这个json数据地址是/data.php,那么a.html中的代码就可以这样:
?
我们看到获取数据的地址后面还有一个callback参数,按惯例是用这个参数名,但是你用其他的也一样。当然如果获取数据的jsonp地址页面不是你自己能控制的,就得按照提供数据的那一方的规定格式来操作了。
因为是当做一个js文件来引入的,所以/data.php返回的必须是一个能执行的js文件,所以这个页面的php代码可能是这样的:
?
最终那个页面输出的结果是:
?
所以通过/data.php?callback=dosomething得到的js文件,就是我们之前定义的dosomething函数,并且它的参数就是我们需要的json数据,这样我们就跨域获得了我们需要的数据。
这样jsonp的原理就很清楚了,通过script标签引入一个js文件,这个js文件载入成功后会执行我们在url参数中指定的
您可能关注的文档
最近下载
- 《公共行政学》期末复习题.doc VIP
- 公路工程竣交工验收培训课件.pptx VIP
- 小学生品德发展与道德教育 【第1章】 品德发展与道德教育概述 教学PPT课件.pptx VIP
- 吸湿器说明书(中英文)明远(46).doc VIP
- 学习解读《SLT 631水利水电工程单元工程施工质量验收标准 第 4 部分:堤防与河道整治工程》课件.pptx
- 以德育之笔——2025年秋季学期学校德育工作安排表 第二版.docx VIP
- 新概念2册1-36课测试卷.pdf VIP
- 企业会计准则讲解2010版.doc
- 入党志愿书(全电子版).pdf VIP
- 2025年秋季统编版七年级上册道德与法治全册教学课件.pptx
文档评论(0)