【【5种处理js跨域问题方法汇总】】

当协议名、主机名、端口名,有一个不相同的时候,就需要跨域。例子https://www.baidu.com:80/index.html,这三个不同就不发使用。

src可以访问外部的连接进行数据处理。


【1.jsonp。ajax请求,dataType为jsonp。这种形式需要请求在服务端调整为返回callback([json-object])的形式。

【2.iframe跨域。页面中增加一个iframe元素,在需要调用get请求的时候,将iframe的src设置为get请求的url即可发起get请求的调用。

代码如下:var url = "http://xxx.xxx.xxx?p1=1&p2=2";

         $("#iframe").attr("src", url);//跨域,使用iframe

iframe方式强于jsonp,除了可以处理http请求,还能够跨域实现js调用。

基于iframe实现的跨域要求两个域具有aa.xx.com,bb.xx.com这种特点,也就是两个页面必须属于一个基础域(例如都是xxx.com,或是xxx.com.cn),使用同一协议(例如都是 http)和同一端口(例如都是80),这样在两个页面中同时添加document.domain,就可以实现父页面调用子页面的函数,

【3.script元素的src属性处理。

1/iframe、img、style、script等元素的src属性可以直接向不同域请求资源,jsonp正是利用script标签跨域请求资源的简单实现,所以这个和jsonp本质一样,同样需要服务端请求返回callback...形式。

2/基于script标签实现跨域 

script标签本身就可以访问其它域的资源,不受浏览器同源策略的限制,可以通过在页面动态创建script标签,代码如下: 

var script = document.createElement('script');  

script.src = "http://aa.xx.com/js/*.js";  

document.body.appendChild(script);  

    这样通过动态创建script标签就可以加载其它域的js文件,然后通过本页面就可以调用加载后js文件的函数,这样做的缺陷就是不能加载其它域的文档,只能是js文件,jsonp便是通过这种方式实现的,jsonp通过向其它域传入一个callback参数,通过其他域的后台将callback参数值和json串包装成javascript函数返回,因为是通过script标签发出的请求,浏览器会将返回来的字符串按照javascript进行解析执行,实现了域与域之间的数据传输。 

jquery中对jsonp的支持也是基于此方案。 

【4.在服务器使用get处理。

 对于业务上没有硬性要求在前端处理的,可以在服务端做一次封装,再服务端发起调用,这样就可以解决跨域的问题。然后再根据请求是发出就完,还是需要获取返回值,来决定代码使用同步或者异步模式。

【5.flash跨域

过于尖端了==,再研究


1、谷歌浏览器后面加后缀,就成为跨域浏览器。json不能跨域。

2、解决跨域方法:先与后台协商好,用jsonp



【谷歌浏览器跨域问题解决:】

桌面谷歌浏览器快捷方式---复制副本---属性---目标尾部添加 --disable-web-security --user-data-dir

JavaScript跨域问题方法汇总_谷歌

例如C:\Users\Administrator\AppData\Local\Google\Chrome\Application\chrome.exe --disable-web-security --user-data-dir