解析原来浏览器原生支持JS Base64编码解码


Posted in Javascript onAugust 12, 2019

上次给大家分享了如何用js实现剪切板粘贴上传图片,今天跟大家分享下JS Base64编码解码。

1. 基础不牢,选型糟糕

糟糕的技术选型往往源自自身技术广度不足。就在数月前,一个前端HTML字符信息转Base64的需求,我是毫不犹豫去找了个开源的base64.js。使用很简单,浏览器引入该JS文件,然后Base64编码这样:

解析原来浏览器原生支持JS Base64编码解码

解码就调用decode方法,如下:

解析原来浏览器原生支持JS Base64编码解码

数据准确,功能良好。当时弄完还洋洋得意,以为是个完美的解决。结果,今天发现,尼玛原来浏览器很早就支持了JS Base64加密解密,而上面这种洋洋得意的做法完全就是瞎子点灯——白费蜡!根本就不是一个好的技术选型。

由于技术广度掌握不足,或者说JS基础掌握不牢,导致浪费了大把时间去找Base64的JS语言库,学习其API用法,换来一个冗余完全不需要加载的JS,现在来看,真是个糟糕的技术选型。

2. 原生atob和btoa方法

实际上,从IE10+浏览器开始,所有浏览器就原生提供了Base64编码解码方法,不仅可以用于浏览器环境,Service Worker环境也可以使用。

方法名就是atob和btoa,具体语法如下:

1)Base64解码

语法为(浏览器中):

var decodedData = window.atob(encodedData);

或者(浏览器或js Worker线程中):

var decodedData = self.atob(encodedData);

例如:

window.atob('emhhbmd4aW54dQ==');

// 返回:'zhangxinxu'

atob这个方法名称乍一看,很奇怪,不知道这个单词什么意思。我们可以理解为 A to B,也就是从A到B。这里的B指的就是Base64吗?哈哈哈,恭喜你!猜错了!A指的才是Base64,反的,B才是普通字符,普通意思就是low,俗称low B。所以我们这么记忆,Low B,Low B,B表示很Low的普通字符,A才是Base64,和首字母对应关系是反的。

因此,atob表示Base64字符to普通字符,也就是Base64解码。

2)Base64编码

语法为(浏览器中):

var encodedData = window.btoa(stringToEncode);

或者(浏览器或js Worker线程中):

var encodedData = self.btoa(stringToEncode);

例如:

window.btoa('zhangxinxu');

// 返回:'emhhbmd4aW54dQ=='

btoa这个方法名称乍一看,很奇怪,不知道这个单词什么意思。我们可以理解为 B to A,也就是从B到A。那B指什么,A指什么呢?和atob方法一样,B指的是low B普通字符串,A指的是Base64字符。

因此,btoa方法表示low B普通字符to Base64字符,也就是Base64编码。

3. IE8/IE9的polyfill

当下,仍有不少PC项目还需要兼容IE9,所以,我们可以专门针对这些浏览器再引入一段ployfill脚本或者一个JS文件即可。

实际使用,我们可以借助IE条件注释无缝对接。也就是HTML中嵌入下面一段代码:

解析原来浏览器原生支持JS Base64编码解码

[if IE]表示所有IE浏览器,由于IE10+浏览器已经放弃了著名的IE条件注释的支持,Chrome等浏览器本身就不支持这个IE私有语法,因此,很天然的,上面一段script引入只在IE9-浏览器下有效。而我们本来就希望只IE8,IE9浏览器引入ployfill,于是正好完美衔接上。

也就是原生支持atob和btoa方法的浏览器认为就是一段无需关心的HTML注释,不支持atob和btoa的IE9及其以下浏览器则会加载我们的base64-polyfill.js,使浏览器也支持window.btoa和window.atob这个语法。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
从盛大通行证上摘下来的身份证验证js代码
Jan 11 Javascript
鼠标焦点离开文本框时验证的js代码
Jul 19 Javascript
原生js做的手风琴效果的导航菜单
Nov 08 Javascript
JavaScript来实现打开链接页面的简单实例
Jun 02 Javascript
JS实现图片延迟加载并淡入淡出效果的简单方法
Aug 25 Javascript
手机浏览器 后退按钮强制刷新页面方法总结
Oct 09 Javascript
javascript闭包功能与用法实例分析
Apr 06 Javascript
jQuery+Ajax请求本地数据加载商品列表页并跳转详情页的实现方法
Jul 12 jQuery
vue实现点击图片放大效果
Aug 15 Javascript
解决vuejs 使用value in list 循环遍历数组出现警告的问题
Sep 26 Javascript
详解ES6 Promise的生命周期和创建
Aug 18 Javascript
vue中组件通信详解(父子组件, 爷孙组件, 兄弟组件)
Jul 27 Javascript
在vue-cli 3中给stylus、sass样式传入共享的全局变量
Aug 12 #Javascript
微信小程序实现页面跳转传递参数(实体,对象)
Aug 12 #Javascript
微信小程序实现传递多个参数与事件处理
Aug 12 #Javascript
node命令行工具之实现项目工程自动初始化的标准流程
Aug 12 #Javascript
五分钟搞懂Vuex实用知识(小结)
Aug 12 #Javascript
no-vnc和node.js实现web远程桌面的完整步骤
Aug 11 #Javascript
Angular8基础应用之表单及其验证
Aug 11 #Javascript
You might like
一些需要禁用的PHP危险函数(disable_functions)
2012/02/23 PHP
PHP setTime 设置当前时间的代码
2012/08/27 PHP
php实现的Timer页面运行时间监测类
2014/09/24 PHP
php 如何获取文件的后缀名
2016/06/05 PHP
php 二维数组时间排序实现代码
2016/11/19 PHP
PHP+MySQL实现消息队列的方法分析
2018/05/09 PHP
Input 特殊事件onpopertychange和oninput
2009/06/17 Javascript
jquery上传插件fineuploader上传文件使用方法(jquery图片上传插件)
2013/12/05 Javascript
jQuery插件实现大图全屏图片相册
2015/03/14 Javascript
JavaScript将一个数组插入到另一个数组的方法
2015/03/19 Javascript
深入讲解AngularJS中的自定义指令的使用
2015/06/18 Javascript
AngularJS  ng-repeat遍历输出的用法
2017/06/19 Javascript
AngularJS实现表格的增删改查(仅限前端)
2017/07/04 Javascript
微信小程序wx.getImageInfo()如何获取图片信息
2018/01/26 Javascript
vue项目base64字符串转图片的实现代码
2018/07/13 Javascript
vue中tab选项卡的实现思路
2018/11/25 Javascript
小程序云开发实现数据库异步操作同步化
2019/05/18 Javascript
JavaScript复制变量三种方法实例详解
2020/01/09 Javascript
vue浏览器返回监听的具体步骤
2021/02/03 Vue.js
python解决字典中的值是列表问题的方法
2013/03/04 Python
Python中的推导式使用详解
2015/06/03 Python
Python绘制3d螺旋曲线图实例代码
2017/12/20 Python
特征脸(Eigenface)理论基础之PCA主成分分析法
2018/03/13 Python
Diango + uwsgi + nginx项目部署的全过程(可外网访问)
2018/04/22 Python
python抓取网页内容并进行语音播报的方法
2018/12/24 Python
Python使用Pickle模块进行数据保存和读取的讲解
2019/04/09 Python
Python匿名函数/排序函数/过滤函数/映射函数/递归/二分法
2019/06/05 Python
Python算法的时间复杂度和空间复杂度(实例解析)
2019/11/19 Python
python 实现关联规则算法Apriori的示例
2020/09/30 Python
Trip.com香港网站:Ctrip携程旗下,全球最大的网上旅游社之一
2016/08/01 全球购物
高山背包:High Sierra
2017/11/23 全球购物
Antler英国官网:购买安特丽行李箱、拉杆箱
2019/08/25 全球购物
总经理驾驶员岗位职责
2013/12/04 职场文书
《一本男孩子必读的书》教学反思
2014/02/19 职场文书
交通事故协议书
2014/04/15 职场文书
男方家长婚礼答谢词
2015/09/29 职场文书