众所周知,jsonp利用浏览器不限制加载跨域外部资源的特性,使用script标签src属性请求接口,加载数据,在script中触发提早声明好的函数拿到数据,前端的前辈们这一手操做简直就是犀利。
其实实现单向的接口调用使用任何资源标签均可以实现,关键在于如何取到后端传回的数据实现双向交互。
现代浏览器提供了getComputedStyle这个API,使得经过js能够拿到某个元素最终应用的css样式。(低版本IE中为currentStyle)。以下所示:css
如此一来,咱们就能够在css样式中取得想要的数据文本
1.利用伪类的::after或::before的 { content:"{数据}" } 或者利用 font-family:"{数据}"前端
data.css 代码 .data-div{ font-family: "{a:'1'}"; }
2.动态加载css样式,并监听其load事件,我这里用的是静态文件(上边的data.css),有兴趣的能够写个接口试下。json
<div class="data-div" style="width:50px;height:50px;background:red;"></div> <script> div = document.getElementsByClassName("data-div")[0] //应用样式的数据标签 div.onclick = function(){ var link = document.createElement("link"); link.rel = "stylesheet" link.href = "/data.css" link.type = "text/css" link.onload = function(){ console.log(window.getComputedStyle(div)["fontFamily"]); //获取写在font-family属性的数据 } document.head.appendChild(link) } </script>
3.点击数据标签,能够看到输出结果以下:后端
PS:这个方法和JSONP同样须要后端配合将数据按必定的规则拼接给前端,其实放到如今并没什么卵用,如今已经不多有看到用JSONP实现跨域请求的。可是本身玩一玩仍是能够的,顺便致敬一波JSONP,致敬一波前辈们跨域