如何去解决 JS 跨域问题? 怎么能学好 web 前端开发? JavaScript 跨域是指通过 JS 在不同的域之间进行数据传输或通信, 比如用 Ajax 向一个不同的域请求数据, 或者通过 JS 获取页面中不同域的框架中 (iframe) 的数据. 只要协议, 域名, 端口有任何一个不同, 都被当作是不同的域. 那么如何解决跨域问题呢? 下面来看看吧.
在此之前, 我们首先要了解为什么需要跨域. 跨域, 指的是浏览器不能执行其他网站的脚本. 它是由浏览器的同源策略造成的, 是浏览器对 JavaScript 施加的安全限制. 简单来说, 跨域的作用就是让你能访问不是一个域的文件.
要解决跨域问题, 我们可以使用以下几种方法:
一, 通过 JSONP 跨域(实际上是动态创建 script 标签)
JSONP(JSON with Padding)是资料格式 JSON 的一种 "使用模式", 可以让网页从别的网域要资料. JSONP 也叫填充式 JSON, 是应用 JSON 的一种新方法, 只不过是被包含在函数调用中的 JSON.JSONP 由两部分组成: 回调函数和数据. 回调函数是当响应到来时应该在页面中调用的函数, 而数据就是传入回调函数中的 JSON 数据.
二, 通过 document.domain+ iframe (只有在主域相同的时候才能使用该方法)
两个不同域的 a.html 和 b.HTML
解决办法: 在两个页面都插入 document.domain, 这样就能访问 iframe 里 Windows 对象的各种属性.
三, 使用 Windows.name 来进行跨域
原理: 在一个窗口 (Windows) 的生命周期内, 窗口载入的所有的页面都是共享一个 Windows.name 的, 每个页面对 Windows.name 都有读写的权限
四, 使用 HTML5 的 Windows.postMessage 方法来跨域传送数据
五, 利用 CORS
CORS 是自定义 HTTP 头部, 使浏览器和服务器对比, 从而决定请求和响应是否应该进行.
IE8 使用 XDR 对象实现 CORS, 和 XHR 类似用法
现代浏览器使用普通的 XMLHttpRequest 对象请求就行.
来源: http://www.jianshu.com/p/e6c47fad092d