JavaScript跨域问题
通过实现Ajax通信的主要限制,来源于跨域安全策略。默认情况下,XHR对象只能访问与包含它的页面位于同一个域中的资源。这种安全策略可以预防某些恶意行为。但是,实现合理的跨域请求对于开发某些浏览器应用程序也是至关重要的。
解决方案有:
1、JSONP:json+padding(内填充)
原理:动态插入script标签
通过script标签实现跨域请求,然后在服务端输出JSON数据并执行回调函数,从而解决跨域的数据请求。
2、CORS(Cross-Origin Resource Sharing, 跨域资源共享)
服务器端对CORS的支持,主要是通过设置Access-Control-Allow-Origin来进行的。就可以允许Ajax进行跨域的访问。
3、document.domain + iframe
通过修改document.domain来跨子域
将子域和主域的document.domain设置为同一个主域,前提条件:这两个域名必须属于同一个基础域名,而且所使用的协议,端口号都要一致,否则无法利用document.domain实现跨域。
4、window.name
window对象有一个name属性,该属性有一个特征,即在一个窗口的生命周期内,窗口载入的所有页面都是共享一个window.name的,每个页面对window.name都有读写权限,window.name是持久存在一个窗口载入过的所有页面中
5、window.postMesssage
postMessage是HTML5新引进的特性
6、服务器上设置代理页面
window.name的方法不复杂,也能兼容几乎所有的浏览器,是一个很好得跨域请求方法。