码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2019-11-09 11:44:37      阅读:77      评论:0      收藏:0      [点我收藏+]

标签:ref   通过   element   end   标签   文本   api   外部   实现   

众所周知,jsonp利用浏览器不限制加载跨域外部资源的特性,使用script标签src属性请求接口,加载数据,在script中触发提前声明好的函数拿到数据,前端的前辈们这一手操作简直就是犀利。

其实实现单向的接口调用使用任何资源标签都可以实现,关键在于如何取到后端传回的数据实现双向交互。
现代浏览器提供了getComputedStyle这个API,使得通过js可以拿到某个元素最终应用的css样式。(低版本IE中为currentStyle)。如下所示:

技术图片

如此一来,我们就可以在css样式中取得想要的数据文本
1.利用伪类的::after或::before的 { content:"{数据}" } 或者利用 font-family:"{数据}"


data.css 代码
.data-div{
    font-family: "{a:‘1‘}";
}

2.动态加载css样式,并监听其load事件,我这里用的是静态文件(上边的data.css),有兴趣的可以写个接口试下。


<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,致敬一波前辈们

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

标签:ref   通过   element   end   标签   文本   api   外部   实现   

原文地址:https://www.cnblogs.com/qianduanwriter/p/11824477.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!