共计 722 个字符,预计需要花费 2 分钟才能阅读完成。
最近经常看到有关浏览器跨域的问题,查了很多资料,所以在这总结一下。
由于浏览器的 同源策略,当我们想要进行一个 ajax 请求或者获取其他域名的数据时就会出现跨域问题。避免跨域问题可以有以下几种方法:
document.domain
我们可以在要传输数据的两个页面设置相同的 document.domain=”www.example.com”,使其主域相同。但这只有当两个页面的主域相同时才能设置。比如 ”www.a.com” 和 ”bt.a.com”,但 ”a.com” 和 ”b.com” 就不行。
window.name
因为浏览器窗口共用一个 window.name,利用这种 hack 设置 window.name 为传输的数据,可以在同一个窗口页面内进行数据传输。但缺陷是数据量不会太大,并且只能传输字符串。
CORS
HTML5 新增的 CORS 方案。简单来说就是在服务器端设置 Access-Control-Allow-Origin:* 则代表允许任何域连接,也可以设置为想要连接的域地址。
JSONP
利用 script 标签的 src 获取 url 可以实现跨域,通过在 url 中设置 callback 参数,url 返回的是 json 数据,然后在客户端设置回调函数处理数据,就可以实现跨域。但缺点是只能用于 get 方法。
postMessage 方法
HTML5 新增 window.postMessage(message, targetOrigin, [transfer)方法,message 代表传输的数据,targetOrigin 代表接受的目标域,transfer 是可选变量,代表跟随 message 一起传输的数据,且传输过去后在发送端不再可用。
接受端通过监听 message 事件,调用 event.data 来获取数据。