跨域问题

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/

原文地址:https://www.cnblogs.com/yanwei-sun/p/5286759.html