欢迎来到HELLO素材网! 南京网站制作选择顺炫科技
丰富的DIV CSS模版、JS,jQuery特效免费提供下载
当前位置:主页 > 建站教程 > JS教程 >

ajax跨域、iframe跨域和JS跨域通讯的几种处理计划

发表于2019-04-24 12:07| 次阅读| 来源网络整理| 作者session

摘要:ajax跨域、iframe跨域和JS跨域通讯的几种处理计划

ajax跨域、iframe跨域和JS跨域通讯的几种处理计划

  最近做的一个名目中需求ajax跨域取得数据,假设是在本域中的确没有成绩,然而放到二级域和其余域下阅读器间接就弹出揭示框:“该页正在访问其控制范围之外的数据,这有些风险,能否持续"
  
  1.什么惹起了ajax跨域不能的成绩
  
  ajax自身实践上是经过XMLHttpRequest对象来停止数据的交互,而阅读器出于平安思考,不容许js代码停止跨域操作,所以会警告。
  
  2.有什么完美的处理计划么?
  
  没有。处理计划有不少,然而只能是依据本人的实践情况来抉择。
  
  详细情况有:
  
  一、本域和子域的相互访问:和book.aa.com
  
  二、本域和其余域的相互访问:和用iframe
  
  三、本域和其余域的相互访问:和用XMLHttpRequest访问代理
  
  四、本域和其余域的相互访问:和用JS创建动态脚本
  
  处理方法:
  
  一、假设想做到数据的交互,那么和book.aa.com必须由你来开发才可能。可能将book.aa.com用iframe减少到的某个页面下,在和iframe里面都加上document.domain="aa.com",这样就可能一致域了,可能完成跨域访问。就战争时同一个域中镶嵌iframe一样,间接调用里面的JS就可能了。(这个办法我没有尝试,不过理论可行)
  
  二、当两个域不同时,假设想相互调用,那么异样需求两个域都是由你来开发才可能。用iframe可能完成数据的互相调用。处理计划就是用window.location对象的hash属性。hash属性就是#dshakjdhsjka里面的#dshakjdhsjka。应用JS扭转hash值网页不会刷新,可能这样完成经过JS访问hash值来做到通讯。不过除了IE之外其余大局部阅读器只需扭转hash就会记载历史,你在行进和后退时就需求解决,十分费事。不过再做简略的解决时还是可能用的,详细的代码我再下面有下载。大体的过程是页面a和页面b在不同域下,b经过iframe减少到a里,a经过JS修正iframe的hash值,b里面做一个监听(由于JS只能修正hash,数据能否扭转只能由b本人来判别),检测到b的hash值被修正了,失去修正的值,通过解决前往a需求的值,再来修正a的hash值(这个中央要留意,假设a自身是那种查询页面的话比如?id=3,在b中间接parent.window.location是无奈取得数据的,异样报没有权限的谬误,需求a把这个传过来,所以也比较费事),异样a里面也要做监听,假设hash变化的话就取得前往的数据,再做相应的解决。
  
  三、这种情景是最常常遇到的,也是用的最多的了。就是和你只能修正一个,也就是另外一个是他人的,人家通知你你要取得数据就访问某某衔接参数是什么样子的,最后前往数据是什么格式的。而你需求做的就是在你的域下新建一个网页,让服务器去他人的网站上取得数据,再前往给你。domain1下的a向同域下的GetData.aspx申请数据,GetData.aspx向domain2下的ResponseData.aspx发送申请,ResponseData.aspx前往数据给GetData.aspx,GetData.aspx再前往给a,这样就实现了一次数据申请。GetData.aspx在其中充当了代理的作用。详细可能看下我的代码。
  
  四、这个和上个的区别就是申请是利用<script>标签来申请的,这个要求也是两个域都是由你来开发才行。原理就是JS文件注入,在本域内的a内生成一个JS标签,它的SRC指向申请的另外一个域的某个页面b,b前往数据即可,可能间接前往JS的代码。由于script的src属性是可能跨域的。详细看代码,这个也比较简略。
  
  code:
  
  
  
  (csdn不能粘贴附件么?)
  
  总结:
  
  第一种情况:域和子域的成绩,可能齐全处理交互。
  
  第二种情况:跨域,完成过程十分费事,需求两个域开发者都能控制,实用于简略交互。
  
  第三种情况:跨域,开发者只控制一个域即可,完成过程需求添加代理取得数据,是常用的模式。
  
  第四种情况:跨域,两个域开发者都需求控制,前往一段js代码。
  
  PS:代码本人依照情况修正即可。
  
  这是拿他人的参考链接,老美的文章比较多。
  
  1.Security Considerations:Dynamic HTML
  
  ?url=/workshop/author/dhtml/sec_dhtml.asp
  
  2.About Cross-Frame Scripting and Security
  
  ?url=/workshop/author/om/xframe_scripting_security.asp
  
  3.Cross-Domain Proxy
  
  
  
  4.Cross Domain XMLHttpRequest using an IFrame Proxy
  
  
  
  5.Back Button Support for Atlas UpdatePanels
  
  
  
  6.Cross-document messaging hack
  
  
  
  7.Building Mash-ups with"Atlas"
  
  
  
  8.Calling web services hosted outside of your application with“Atlas”
  
  
  
  %20Documents/Presentations%20by%20Marc%
  
  20Schweigert/CallAtlasWebServiceInDifferentProject.zip
  
  9.AJAX Tip:Passing Messages Between iframes
  
  ?guid=3b03cf9d-b589-4838-806e-64efcc0a1a15
  
  10.OSCON Cross-site Ajax Slides
  
  
  
  
  
  11.OSCON2006:Cross-site Ajax