跨域:由浏览器的同源策略引起的
--------------------------------------------
跨域的情况: 协议不同(http/https)、域名不同、端口不同
http:www.a.com https:www.a.com
www.a.com b.a.com(子域名)
www.a.com wwww.b.com
www.a.com:8080 www.a.com:8081
ajax:XMLHttpRequest() 不允许跨域
解决:
1.子域与主域之间
document.domin='a.com'
2.服务器代理:XMLHttpRequest代理文件
3.script标签:jsonp 单域操作
jsonp:json+padding(内填充)
//前端调用
function box(json){
alert(json.name);
}
//后台数据:
box({name:'ccccd'});
//调用方式
<script type="text/javascript" src="xxx.php?key=value&key2=value2"></script>
会存在JS执行顺序问题 script标签是按顺序执行的
最好用动态的方法;
function createJs(sUrl){
var oScript=document.createElement('script');
oScript.type="text/javascript";
oScript.src=sUrl;
document.getElementByTagName('head')[0].appendChild(oScript);
}
createJs("xxx.php?callback=bax");//对应后面数据里的bax
function box(json){
alert(json.name);
}
4.iframe 哈希值 ——把数据带过去
b网站 :<iframe src="xx.php?key=value"></iframe>
a网站:
parent.location.hash=xxx //ie chrome 不支持
可以再创建一个yyy.html 把数据填上去
self.location.hash=parent.location.hash
5.window.name
www.a.com/c1.html iframe src到 c2
www.b.com/代理.html 共用window.name
www.b.com/c2.html window.name="数据"
6.flash
7.html5 postMessage