美文网首页
漫谈JSONP以及<img>的onLoad和onEr

漫谈JSONP以及<img>的onLoad和onEr

作者: 浩神 | 来源:发表于2017-12-09 00:40 被阅读31次

利用jsonp进行跨域已经是老生常谈了。主要原理是浏览器解析<script>标签的时候,会用script的src属性去发一个网络请求,并将response的东西当做javascript去执行。而浏览器对js脚本并没有做跨域限制。

一个简单的jsonp例子

const url = 'http://www.xxx.com/api/someThing?query=WITH_SOME_DATA&callback=handleResponse'
const scriptElement = document.createElement('script');
scriptElement.src = url;
document.body.appendChild(scriptElement)

JSONP的核心在于下面几点:

  • 创建一个script标签,设置src为要调用的api并且看情况携带一些数据或者指定回调;
  • 将标签添加到html文档中;
  • 浏览器会自动根据src请求数据,并将response理解为Javascript执行。
    这里假象了一下如果后端是nodejs的话大概会怎么做:
const callback = req.query.callback;
const  data = ... // 
const response = `${callback}(${JSON.stringify(data)})`

关键点在于:
后端的返回数据一定是可执行的JavaScript代码!!
后端的返回数据一定是可执行的JavaScript代码!!
后端的返回数据一定是可执行的JavaScript代码!!
所以刚刚我在response那里实际上拼接了一个函数调用。
那么回到浏览器这边,浏览器拿到CALLBACK_NAME(''some data")
那么就开始执行这个函数了。那么同时就要求前端要实现约定的回调函数,并暴露到全局环境

如果换做img标签来做这些事情

同理解析<img>等元素,同样没有对域做安全限制。所以理论上只要能发出跨域的网络请求,都能用来实现跨域。
而大家总会使用script标签来做跨域无非是因为script标签能发出请求,并且能放一些代码放在回应里面,达到回调的效果

所以理论上来说,如果考虑回调,需要使用script,使用jsonp技术。那么如果只是单纯地想跨域发一个request,那么选择script或者img等元素也无关紧要了。

img其实也能做一些事情

img元素能添加onError onLoad 属性,用于监听加载失败或者加载成功。
这意味着img实现请求成功或者失败的回调是OK的,但是接收不到server端的数据。

相关文章

  • 漫谈JSONP以及<img>的onLoad和onEr

    利用jsonp进行跨域已经是老生常谈了。主要原理是浏览器解析 标签的时候,会用script的src属性去发一个网络...

  • <img>元素

    一、不种格式图片的使用 1.JPEG格式—照片和复杂图像使用 适合连续色调图像,例如照片 包含颜色丰富多达1600...

  • <img>标签

  • 芯科通信招聘fw固件工程师

    职责描述 工作职责:lt;/pgt;lt;pgt;1、负责光模块firmware的软件设计、维护以及优化;lt;/...

  • window.onload=function()以及onload

    window.onload: 页面加载完成 一,window.onload的用法: 该方法用于在网页加载完毕后立刻...

  • <img> 的 title 和 alt 属性的区别

    一、什么是alt属性? alt属性,是 的特有属性,是图片内容的等价描述,用于图片无法加载时显示或读屏器阅读图片(...

  • 简述domready和onload事件的区别

    题目:简述domready和onload事件的区别?图片的onload和domready和页面onload的先后顺...

  • json及jsonp注入

    json以及jsonp 前言 JSONP全名为JSON with Padding,其存在的意义便有绕过诸如同源策略...

  • JSONP原理

    只要说到跨域,就必须聊到JSONP,就必须讲一下JSONP的实现原理,以及在项目中哪个需求使用了JSONP,简单讲...

  • 就算你懂了JSONP,那你又懂AJAX吗?

    上篇文章我们说到了什么是JSONP以及JSONP的用法,但说到底,JSONP终究只是一种以脚本的形式来运行的方法,...

网友评论

      本文标题:漫谈JSONP以及<img>的onLoad和onEr

      本文链接:https://www.haomeiwen.com/subject/iqayixtx.html