js跨域是指通过js在不同的域之间进行数据传输或通信,只要协议、域名、端口有任何一个不同,都被当作是不同的域。
举例: 协议: http/https 域名:主机名 端口 :8080
1.通过jsonp跨域
jsonp是说json格式数据使用的一种方式。
原理是:动态插入script
标签,通过script
标签引入一个js
文件,这个js文件载入成功后会执行我们在url参数中指定的函数,并且会把我们需要的json
数据作为参数传入。jsonp是需要服务器端的页面进行相应的配合的。
由于同源策略的限制,XmlHttpRequest
只允许请求当前源(域名、协议、端口)的资源,为了实现跨域请求,可以通过script
标签实现跨域请求,然后在服务端输出JSON数据并执行回调函数,从而解决了跨域的数据请求。
优点是兼容性好,简单易用,支持浏览器与服务器双向通信。缺点是只支持GET请求。
jQuery 中 $.getJSON方法会自动判断是否跨域,不跨域的话,就调用普通的ajax方法;跨域的话,则会以异步加载js文件的形式来调用jsonp的回调函数。
2.document.domain进行跨域
将子域和主域的document.domain
设为同一个主域.这里说的主域和子域说的是不同的页面。
前提条件:这两个域名必须属于同一个基础域名!而且所用的协议,端口都要一致,否则无法利用document.domain
进行跨域
3.window.name进行跨域
window.name是持久存在一个窗口载入过的所有页面中的,并不会因新页面的载入而进行重置。
4.HTML5的window.postMessage
方法来跨域传送数据
无论这个window对象是属于同源或不同源,可以使用它来向其它的window对象发送消息。