js跨域的几种方式:
(1)iframe标签+document.domain
此方法针对对于主域相同而子域不同的例子
页面a.html要访问b.html
a.html:
b.html:
(2)jsonp(JSONP只能实现GET请求)
所有的浏览器都遵守同源策略(JavaScript是一种在Web开发中经常使用的前端动态脚本技术。在JavaScript中,有一个很重要的安全性限制,被称为“Same-Origin Policy”(同源策略)。这一策略对于JavaScript代码能够访问的页面内容做了很重要的限制,即JavaScript只能访问与包含它的文档在同一域下的内容。),这使得直接通过URL请求外部的资源会禁止,但是<\scipt>标签没有跨域限制。jsonp的跨域就是钻了这一漏洞,实现的跨域。
jQuery ajax的实现形式
jquery对jsonp进行了封装,没有写localHandler1函数这个回调函数,是因为jquery在处理jsonp类型的ajax时会自动生成回调函数并把数据取出来提供给success方法来调用。
(3)window.name跨域
假设app.html页面请求远程的服务器数据。我们在app.html页面新建一个iframe标签,服务器文件data.html里设置好window.name的值,然后在app.html读取window.name的值,先通过localhost:8080/web/data.html把数据读出来,再修改src的值。window.name 的值在不同的页面(甚至不同域名)加载后依旧存在(如果没修改则值不会变化),并且可以支持非常长的 name 值(2MB)。
参考(http://www.cnblogs.com/zichi/p/4620656.html)
(4)postMessage()方法
postMessage方法是html5的方法,postMessage(message,targetOrigin)接收两个参数,message是即将要发送到目标窗口的字符串或者说对象,targetOrigin是接收窗口的url。
(window<->window)
(window<->iframe)
(5)cors跨域
(6)flash跨域
(7)frame+location.hash