偶然发现了另外一种跨域方式,不知道有没有人这么玩过

众所周知,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,致敬一波前辈们跨域

相关文章
相关标签/搜索