几种常见的跨域技术

 

1:图像pingphp

图像ping是与服务器进行简单,单项的跨域通讯的一种方式
var img=new Image();
img.onload=img.onerror=function(){
     alert("done")
}
img.src="http://www.example.com/test?name=sl";html

2:jsonp(最实用) jsonp是经过动态<script>元素来使用的jquery

egajax

function callbackFunction(){
   alert("回滚");
}
var script=document.createElement("script");
script.src="http://frergeoip.net.json/?callback=callbackFunction";
document.body.insertBefore(script,document.body.firstChild);

3:使用jquery实现跨域(最简单的)json

 <script> $.getJSON("http://example.com/data.php?callback=?",function(jsondata){ //回调事件 }); </script> 跨域

只不过咱们不须要手动的插入script标签以及定义回掉函数。
jquery会自动生成一个全局函数来替换callback=?中的问号,以后获取到数据后又会自动销毁,实际上就是起一个临时代理函数的做用。
$.getJSON方法会自动判断是否跨域,不跨域的话,就调用普通的ajax方法;跨域的话,则会以异步加载js文件的形式来调用jsonp的回调函数。
服务器

4:经过修改document.domain来跨子域框架

在页面 http://www.example.com/a.html 中设置document.domain:
<iframe src="http://example.com/b.html"  id="iframe"  onload="test()"></iframe>
<script>
   document.domain="example.com";   //设置成他们的父域
   function test(){ 
      document.getElementById("iframe").contentWindow;
   }
</script>

不过若是你想在http://www.example.com/a.html 页面中经过ajax直接请求http://example.com/b.html 页面,即便你设置了相同的document.domain也仍是不行的,dom

因此修改document.domain的方法只适用于不一样子域的框架间的交互。
若是你想经过ajax的方法去与不一样子域的页面交互,除了使用jsonp的方法外,还能够用一个隐藏的iframe来作一个代理。原理就是让这个iframe载入一个与你想要经过ajax获取数据的目标页面处在相同的域的页面,因此这个iframe中的页面是能够正常使用ajax去获取你要的数据的,而后就是经过咱们刚刚讲得修改document.domain的方法,让咱们能经过js彻底控制这个iframe,这样咱们就可让iframe去发送ajax请求,而后收到的数据咱们也能够得到了。异步

5:使用window.name来进行跨域

window对象有个name属性,该属性有个特征:即在一个窗口(window)的生命周期内,窗口载入的全部的页面都是共享一个window.name的,个页面对window.name都有读写的权限,window.name是持久存在一个窗口载入过的全部页面中的,并不会因新页面的载入而进行重置。
在a.html页面

在a.html页面 <script> window.name="我是a页面设置的" </script>

在b.html页面 <script> alert(window.name)    //弹出"我是a页面设置的" </script>

使用window.name来获取b页面想要的值

相关文章
相关标签/搜索