跨域问题
1.先说下什么是跨域
简单地理解就是因为JavaScript同源策略的限制,a.com 域名下的js无法操作b.com或是c.a.com域名下的对象。
那么什么是同源策略呢?
JavaScript只能访问与包含它的文档在同一域下的内容。
所谓同源是指,域名,协议,端口相同。
只有在同一域名下才可以访问,不同端口,不同协议都不可以访问
2.解决方案
(1).jsonp
通常来说,带有src属性的标签都可以实现跨域
将要请求的url放到script动态加载,服务器返回执行字符串,但是这个字符串是在window全局作用域下执行的,你需要把他
返回到你的代码的作用域内,这里就需要临时创建一个全局的回调函数,并把到传到后台,最后再整合实际要请求的数组,返回给前端,
让浏览器直接调用,用回调的形式回到你的原代码流程中。
<script type="text/javascript> var jsonp = function(data){ alert(data); } </> <script type="text/javascript" src="http://xxx.com/jsonp.js?callback=jsonp"></script>
优点是兼容性好,简单易用,支持浏览器与服务器双向通信。缺点是只支持GET请求。
(2)CORS
服务器端对于CORS
的支持,主要就是通过设置Access-Control-Allow-Origin
来进行的。如果浏览器检测到相应的设置,就可以允许Ajax
进行跨域的访问。
(3)web worker
1.通过 worker = new Worker( url ) 加载一个JS文件来创建一个worker,同时返回一个worker实例。
2.通过worker.postMessage( data ) 方法来向worker发送数据。
3.绑定worker.onmessage方法来接收worker发送过来的数据。
4.可以使用 worker.terminate() 来终止一个worker的执行。
(4)window.name
参考这篇文章http://www.planabc.net/2008/09/01/window_name_transport/