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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/101349.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • excel VLOOKUP函数的用法

    excel VLOOKUP函数的用法

    2021年12月8日
    99
  • SSAS(3)_ssa怎么算

    SSAS(3)_ssa怎么算介绍SSAS的存储,涉及:理解分区度量组分区的变更与创建分区的存储模式与区别:MOLAP、ROLAP、HOLAP主动缓存的作用以及低延迟分区的配置  *网上看到有翻译成“预先缓存”的理解聚合部署SSAS对象;自动调度处理SSAS对象使数据最新提及数据延迟的问题,再回到ETL工具SSIS,补充一个实际应用话题:在SSIS中如何捕获上游变更数据(Change DataCap

    2025年6月30日
    3
  • Unity虚拟相机Cinemachine教程[通俗易懂]

    Unity虚拟相机Cinemachine教程[通俗易懂]准备在PackageManager中安装Cinemachine包。1.CinemachineBrain组件相当于虚拟相机的总管理。参数介绍:LiveCamera:当前显示的相机LiveBlend:过度相机时显示进度ShowDebugText:在Game视窗里显示当前使用的相机ShowCameraFrustum:显示视锥IgnoreTimeScale:是否受TimeScale影响WorldUpOverride:自己设置覆盖Y轴防止万向节死锁。UpdateMeth

    2022年5月28日
    215
  • [黑苹果系列] M910x完美黑苹果系统安装教程 – 2 制作系统U盘-USB Creation

    [黑苹果系列] M910x完美黑苹果系统安装教程 – 2 制作系统U盘-USB Creation目前主流的苹果系统的安装方法有两种:1.U盘安装2.Windows下使用镜像恢复软件安装的方式目前,U盘安装是主流选择,这样安装调试好的黑苹果macOS问题最少,也较为稳定。之前的文章由于采用的是镜像恢复的方法,此次安装采取U盘安装系统的方式,因此重新写一篇。1.前期准备U盘一个,大于16G 安装工具软件包 镜像文件 制作合适的EFI文件 需要准备40GB以上独立固态硬盘空间2.下载macOs镜像3.制作安装U盘可以用TransMac或者balenaEt.

    2022年6月9日
    95
  • 前端第二章:8.HTML超链接代码写法;id属性

    前端第二章:8.HTML超链接代码写法;id属性一、超链接介绍0.超链接是行内元素,但是可以放块元素1.从一个页面跳转到另一个页面2.或者跳转到当前页面的其他位置3.href属性的值可以是外部网站,也可以是同一个目录下的地址文件,如xxx.html二、超链接·代码1.超链接写法:<ahref=”你想要跳转到的网址”>超链接的字样</a>2.示例(外部网站和同一个目录下的html都可以写进href名值对结构中):3.浏览器内显示(紫色字样表示你最近访问过,蓝色代表没有访问过):4.

    2022年7月12日
    16
  • enumerate方法_enumerate函数的作用

    enumerate方法_enumerate函数的作用python中的获得索引、和值得方法:enumerate这种方式可以获得索引以及对应的值。但是这显得很繁琐。python其实提供了内置的enumerate函数可以同时获得索引和值,可以这样实现:forindex,keyinenumerate(sequence):process(index,key)如果你想对sequence中的元素作逆置后处理,可以:forind…

    2025年7月9日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号