美文网首页
处理JavaScript的四种解决跨域问题

处理JavaScript的四种解决跨域问题

作者: 萧玄辞 | 来源:发表于2017-11-03 09:06 被阅读0次

    js跨域,是在不同的域之间进行数据传输或通信,比如ajax向不同域请求数据,或者通过js获取页面中不同域的框架中(iframe)的数据.只要协议,域名,端口有任何一个不同,都是不同的域。浏览器都有一个同源策略,其限制之一就是第一种方法中我们说的不能通过ajax的方法去请求不同源中的文档。 它的第二个限制是浏览器中不同域的框架之间是不能进行js的交互操作的。解决跨域问题,可以通过这四种方式。

    一,通过jsonp跨域在js中直接用XMLHttpRequest请求不同域上的数据时,是不可以的.但是可以在页面上引用不同域上的js文件,却是可以的。

    比如,a.html页面,他里面的代码需要利用ajax获取一个不同域上的json数据,

    显示大图

    原理是一样的,只不过我们不需要手动的插入script标签以及定义回掉函数。jquery会自动生成一个全局函数来替换callback=?中的问号,之后获取到数据后又会自动销毁,实际上就是起一个临时代理函数的作用。$.getJSON方法会自动判断是否跨域,不跨域的话,就调用普通的ajax方法;跨域的话,则会以异步加载js文件的形式来调用jsonp的回调函数。

    二,通过修改document.domain来跨子域这样我们就可以通过js访问到iframe中的各种属性和对象了。

    即使你设置了相同的document.domain也还是不行的,所以修改document.domain的方法只适用于不同子域的框架间的交互。如果你想通过ajax的方法去与不同子域的页面交互,除了使用jsonp的方法外,还可以用一个隐藏的iframe来做一个代理。原理就是让这个iframe载入一个与你想要通过ajax获取数据的目标页面处在相同的域的页面,所以这个iframe中的页面是可以正常使用ajax去获取你要的数据的,然后就是通过我们刚刚讲得修改document.domain的方法,让我们能通过js完全控制这个iframe,这样我们就可以让iframe去发送ajax请求,然后收到的数据我们也可以获得了。

    三,使用window.name进行跨域window对象有个name 属性,name属性有个特征,就是在一个窗口(window)的生命周期内,窗口载入的所有的页面都是共享一个window.name的每个页面对window.name都有读写的权限,window.name是持久存在一个窗口载入过的所有页面中的,并不会因新页面的载入而进行重置。

    四,使用HTML5中新引进的window.postMessage方法来跨域传送数据window.postMessage(message,targetOrigin) 方法是html5新引进的特性,可以使用它来向其它的window对象发送消息,无论这个window对象是属于同。

    相关文章

      网友评论

          本文标题:处理JavaScript的四种解决跨域问题

          本文链接:https://www.haomeiwen.com/subject/rubzpxtx.html