同源策略:它是由Netscape提出的一个著名的安全策略。所谓同源指的是协议、域名、端口号相同。举个例子,a.com的js是无法访问b.com下面的对象,而跨域的话就是要打破这一限制
处理跨域的方法:1、访问域名的代理服务器(偏后台)
2.JSONP
关于jsonp实现的原理:确实弄了半天。浏览器并不是对所有的东西都有同源策略的限制,比如说script、ing的src属性,而ajax这里是收到了同源策略的限制,因为是无法进行跨域的,所以需要通过jsonp。json原理:在js中,我们直接用XMLHttpRequest来请求不同域上的js脚本文件是不可以的,但是在页面上引入不同域上的js脚本却是可以的。jsonp正是利用这个特性来实现的。其原理是 通过script标签引入一个js文件,这个js文件载入成功后会执行我们在url参数中指定的函数,并且会把我们需要的json数据作为参数传入,所以jsonp是需要服务器端的页面进行相应的配合。
<script>
$.getJSON('http://nanlanhouse.com/demo.php?callback=?',fucntion(jsondata){
})
</script>
原理是一样的,只不过我们不需要手动的插入script标签以及定义回调函数。jquery会自动生成一个全局函数来替换callback=?中的问好,之后获取到数据后又会自动销毁,实际上就是起一个临时代理函数的作用。$.getJSON方法会自动判断是否跨域,不跨域的话,就调用一般的ajax方法;跨域的话,则会以异步加载js文件的形式来调用jsonp的回调函数。
3.通过修改document.domain来跨子域
浏览器都有一个同源策略,其限制之一就是第一种方法中我们说的不能通过ajax的方法请求不同源中的文档;第二个限制是浏览器中不同域的框架是不能进行js交互操作的。有一点是需要说明的,不同的框架之间(父子或同辈),是能够获取到彼此的window对象,但不能用window对象属性和方法。简单的来说,就是设置相同的主域
4.window.name
5.HTML5新引进的window.postMessage方法来跨域传送数据。