解析原来浏览器原生支持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 相关文章推荐
JQuery困惑—包装集 DOM节点
Oct 16 Javascript
onbeforeunload与onunload事件异同点总结
Jun 24 Javascript
Javascript前端UI框架Kit使用指南之kitjs事件管理
Nov 28 Javascript
jquery+ajax实现注册实时验证实例详解
Dec 08 Javascript
JavaScript类型系统之基本数据类型与包装类型
Jan 06 Javascript
js编写当天简单日历效果【实现代码】
May 03 Javascript
Bootstrap中文本框的宽度变窄并且加入一副验证码图片的实现方法
Jun 23 Javascript
Vue.js每天必学之过渡与动画
Sep 06 Javascript
微信小程序 页面传值详解
Mar 10 Javascript
jQuery制作全屏宽度固定高度轮播图(实例讲解)
Jul 08 jQuery
详解Vue Elementui中的Tag与页面其它元素相互交互的两三事
Sep 25 Javascript
小程序实现锚点滑动效果
Sep 23 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
如何开发一个虚拟域名系统
2006/10/09 PHP
UCenter Home二次开发指南
2009/05/28 PHP
基于curl数据采集之单页面并行采集函数get_htmls的使用
2013/04/28 PHP
php面向对象与面向过程两种方法给图片添加文字水印
2015/08/26 PHP
隐藏Nginx或Apache以及PHP的版本号的方法
2016/01/03 PHP
浅析php-fpm静态和动态执行方式的比较
2016/11/09 PHP
PHP7下协程的实现方法详解
2017/12/17 PHP
插件:检测javascript的内存泄漏
2007/03/04 Javascript
分享XmlHttpRequest调用Webservice的一点心得
2012/07/20 Javascript
IE下写xml文件的两种方式(fso/saveAs)
2013/08/05 Javascript
js页面跳转的常用方法整理
2013/10/18 Javascript
javascript中数组的concat()方法使用介绍
2013/12/18 Javascript
Jquery validation remote 验证的缓存问题解决方法
2014/03/25 Javascript
document.write的几点使用心得
2014/05/14 Javascript
基于JavaScript如何实现ajax调用后台定义的方法
2015/12/29 Javascript
AngularJs验证重复密码的方法(两种)
2016/11/25 Javascript
详解vue2.0组件通信各种情况总结与实例分析
2017/03/22 Javascript
Vue项目使用CDN优化首屏加载问题
2018/04/01 Javascript
[14:57]DOTA2 HEROS教学视频教你分分钟做大人-幽鬼
2014/06/13 DOTA
[02:51]2018年度DOTA2最佳中单位选手-完美盛典
2018/12/17 DOTA
Python正则表达式经典入门教程
2017/05/22 Python
Python 2.x如何设置命令执行的超时时间实例
2017/10/19 Python
python爬虫selenium和phantomJs使用方法解析
2019/08/08 Python
Pycharm+django2.2+python3.6+MySQL实现简单的考试报名系统
2019/09/05 Python
Python Selenium参数配置方法解析
2020/01/19 Python
python2 对excel表格操作完整示例
2020/02/23 Python
html5 移动端视频video的android兼容(去除播放控件、全屏)
2020/03/26 HTML / CSS
北美领先的牛仔品牌:Buffalo David Bitton
2017/05/22 全球购物
能否解释一下XSS cookie盗窃是什么意思
2012/06/02 面试题
机电专业大学生求职信
2013/10/04 职场文书
中英文自我评价语句
2013/12/20 职场文书
《日月潭》教学反思
2014/02/28 职场文书
警察正风肃纪剖析材料
2014/10/16 职场文书
2015年度服装销售工作总结
2015/03/31 职场文书
西柏坡观后感
2015/06/08 职场文书
2019年共青团工作条例最新版
2019/11/12 职场文书