跨域这个问题,其实早就想学习一下,奈何没有时间;本文从几个角度学习跨域1.什么是跨域;2.跨域解决了什么问题;3.跨域实现;
1.什么是跨域?
在不同域(协议不同 || 域名不同 || 或端口不同)之间进行数据传输或者通信就是跨域;举例:http://baidduyun.com/av.html 与https://baiduyun.com/a.html之间通信就产生了跨域,因为http与https协议不同;
2.跨域的作用?
在1中已经说了,在不同域的页面中相互传数据;
3.怎么实现跨域?
其实实现跨域的方法,之前在网上查找的资料中至少发现了N种,下边只列举自己认为最容易接受和理解的两种;
(1).最为常用的jsonp方式实现跨域
在b.com/c.html中使用如下script标签
跨域代码在http://a.com/data.php返回的 必须是一个可执行的 js文件;所以在data.php中它的代码可能是这样的:
php代码,返回可执行的js所以回调函数要执行的其实是:callBack (['a','b','c']),从a.com跨域请求到的数组数据['a','b','c'];如果项目中 使用了jquery框架的话就更方便了:
原理和jsonp是一样的(2).使用window.nama,这得益于在在一个窗口(window)的生命周期内,窗口载入的所有的页面都是共享一个window.name的特性;局限性是window.name只能传输一段字符串;字符串大小限制为2M大小;浏览器在同源或者不同源(即跨域)的window.name都是共享的;比如有一个www.example.com/a.html页面里的js要获取另一个位于不同域上的页面www.cnblogs.com/data.html里的数据。www.cnblogs.com/data.html页面里的代码很简单,就是给当前的window.name设置一个www.example.com/a.html页面想要得到的数据值。data.html里的代码:
在data.html页面中进行的操作在a.html中怎么把data.html页面加载进来?显然不能直接在a中使用window.loacation而是要影式的加载data.html页面,及使用一个影藏的iframe来充当中间角色;
window.name进行跨域的过程将iframe设置为影藏;并设置其src为要获取数据的页面,这里为data.html;然后iframe加载时,在a.html中再把iframe的src设置为和a.html同源的页面,不然获取不到window.name的值;
关于跨域的实现方式还有:document.domain;Html5中window.postMessage方法等等;本文参考博客:https://www.cnblogs.com/2050/p/3191744.html
网友评论