Web页面的跨域问题产生原因是企图使用JS脚本读写不同域的JS作用域。问题根源来自JavaScript的同源策略:出于安全考虑,Javascript限制来自不同源的web页面JS脚本之间进行交互。否则就会出现各种获取用户私密数据的问题。
1、document.domain
它只能只能解决一个域名下的不同二级域名页面跨域,例如person.aa.com与book.aa.com,可以将book.aa.com用iframe添加到 person.aa.com的某个页面下,在person.aa.com和iframe里面都加上document.domain = "aa.com"。
2、Jsonp
Jsonp可以解决XmlHttpRequest请求不能跨域的限制,原理是通过动态创建一个<script> 元素来请求一段JS脚本,让这段脚本在页面作用域里执行,迂回实现类似Ajax的请求。
1 //加载js文件 2 function load_script(url, callback){ 3 var head = document.getElementsByTagName('head')[0]; 4 var script = document.createElement('script'); 5 script.type = 'text/javascript'; 6 script.src = url; 7 script.onload = script.onreadystatechange = function(){ 8 if((!this.readyState||this.readyState === "loaded"||this.readyState === "complete")){ 9 callback && callback(); 10 // Handle memory leak in IE 11 script.onload = script.onreadystatechange = null; 12 if ( head && script.parentNode ) { 13 head.removeChild( script ); 14 } 15 } 16 }; 17 head.insertBefore( script, head.firstChild ); 18 }