最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

解析原來(lái)瀏覽器原生支持JS Base64編碼解碼

 更新時(shí)間:2019年08月12日 10:18:45   作者:程序員手冊(cè)大全  
這篇文章主要介紹了解析原來(lái)瀏覽器原生支持JS Base64編碼解碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

上次給大家分享了如何用js實(shí)現(xiàn)剪切板粘貼上傳圖片,今天跟大家分享下JS Base64編碼解碼。

1. 基礎(chǔ)不牢,選型糟糕

糟糕的技術(shù)選型往往源自自身技術(shù)廣度不足。就在數(shù)月前,一個(gè)前端HTML字符信息轉(zhuǎn)Base64的需求,我是毫不猶豫去找了個(gè)開(kāi)源的base64.js。使用很簡(jiǎn)單,瀏覽器引入該JS文件,然后Base64編碼這樣:

解碼就調(diào)用decode方法,如下:

數(shù)據(jù)準(zhǔn)確,功能良好。當(dāng)時(shí)弄完還洋洋得意,以為是個(gè)完美的解決。結(jié)果,今天發(fā)現(xiàn),尼瑪原來(lái)瀏覽器很早就支持了JS Base64加密解密,而上面這種洋洋得意的做法完全就是瞎子點(diǎn)燈——白費(fèi)蠟!根本就不是一個(gè)好的技術(shù)選型。

由于技術(shù)廣度掌握不足,或者說(shuō)JS基礎(chǔ)掌握不牢,導(dǎo)致浪費(fèi)了大把時(shí)間去找Base64的JS語(yǔ)言庫(kù),學(xué)習(xí)其API用法,換來(lái)一個(gè)冗余完全不需要加載的JS,現(xiàn)在來(lái)看,真是個(gè)糟糕的技術(shù)選型。

2. 原生atob和btoa方法

實(shí)際上,從IE10+瀏覽器開(kāi)始,所有瀏覽器就原生提供了Base64編碼解碼方法,不僅可以用于瀏覽器環(huán)境,Service Worker環(huán)境也可以使用。

方法名就是atob和btoa,具體語(yǔ)法如下:

1)Base64解碼

語(yǔ)法為(瀏覽器中):

var decodedData = window.atob(encodedData);

或者(瀏覽器或js Worker線程中):

var decodedData = self.atob(encodedData);

例如:

window.atob('emhhbmd4aW54dQ==');

// 返回:'zhangxinxu'

atob這個(gè)方法名稱(chēng)乍一看,很奇怪,不知道這個(gè)單詞什么意思。我們可以理解為 A to B,也就是從A到B。這里的B指的就是Base64嗎?哈哈哈,恭喜你!猜錯(cuò)了!A指的才是Base64,反的,B才是普通字符,普通意思就是low,俗稱(chēng)low B。所以我們這么記憶,Low B,Low B,B表示很Low的普通字符,A才是Base64,和首字母對(duì)應(yīng)關(guān)系是反的。

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

2)Base64編碼

語(yǔ)法為(瀏覽器中):

var encodedData = window.btoa(stringToEncode);

或者(瀏覽器或js Worker線程中):

var encodedData = self.btoa(stringToEncode);

例如:

window.btoa('zhangxinxu');

// 返回:'emhhbmd4aW54dQ=='

btoa這個(gè)方法名稱(chēng)乍一看,很奇怪,不知道這個(gè)單詞什么意思。我們可以理解為 B to A,也就是從B到A。那B指什么,A指什么呢?和atob方法一樣,B指的是low B普通字符串,A指的是Base64字符。

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

3. IE8/IE9的polyfill

當(dāng)下,仍有不少PC項(xiàng)目還需要兼容IE9,所以,我們可以專(zhuān)門(mén)針對(duì)這些瀏覽器再引入一段ployfill腳本或者一個(gè)JS文件即可。

實(shí)際使用,我們可以借助IE條件注釋無(wú)縫對(duì)接。也就是HTML中嵌入下面一段代碼:

[if IE]表示所有IE瀏覽器,由于IE10+瀏覽器已經(jīng)放棄了著名的IE條件注釋的支持,Chrome等瀏覽器本身就不支持這個(gè)IE私有語(yǔ)法,因此,很天然的,上面一段script引入只在IE9-瀏覽器下有效。而我們本來(lái)就希望只IE8,IE9瀏覽器引入ployfill,于是正好完美銜接上。

也就是原生支持atob和btoa方法的瀏覽器認(rèn)為就是一段無(wú)需關(guān)心的HTML注釋?zhuān)恢С謅tob和btoa的IE9及其以下瀏覽器則會(huì)加載我們的base64-polyfill.js,使瀏覽器也支持window.btoa和window.atob這個(gè)語(yǔ)法。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • SyntaxHighlighter代碼加色使用方法

    SyntaxHighlighter代碼加色使用方法

    原名:SyntaxHighlighter,是一款用于web頁(yè)面的代碼著色工具,可以用來(lái)著色多種語(yǔ)言,可以是HTML,CSS,Javascript,還可以是C,JAVA等編程語(yǔ)言。最早見(jiàn)于Yahoo的YUI,當(dāng)時(shí)還屬于自由軟件,最近打開(kāi)官方網(wǎng)站發(fā)現(xiàn)已被goolge收編。
    2008-09-09
  • webgl實(shí)現(xiàn)物體描邊效果的方法介紹

    webgl實(shí)現(xiàn)物體描邊效果的方法介紹

    這篇文章主要給大家介紹了關(guān)于webgl實(shí)現(xiàn)物體描邊效果的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用webgl具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • Google (Local) Search API的簡(jiǎn)單使用介紹

    Google (Local) Search API的簡(jiǎn)單使用介紹

    這篇文章主要介紹了Google (Local) Search API的簡(jiǎn)單使用。需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助
    2013-11-11
  • js控制div彈出層實(shí)現(xiàn)方法

    js控制div彈出層實(shí)現(xiàn)方法

    這篇文章主要介紹了js控制div彈出層實(shí)現(xiàn)方法,可實(shí)現(xiàn)點(diǎn)擊鏈接彈出div浮動(dòng)層,且背景色變暗的效果,是一款非常實(shí)用的特效源碼,需要的朋友可以參考下
    2015-05-05
  • JavaScript實(shí)現(xiàn)短信倒計(jì)時(shí)60s

    JavaScript實(shí)現(xiàn)短信倒計(jì)時(shí)60s

    本文給大家分享一段實(shí)例代碼給大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)短信倒計(jì)時(shí)60s功能,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧
    2017-10-10
  • 使用Bootstrap和Vue實(shí)現(xiàn)用戶(hù)信息的編輯刪除功能

    使用Bootstrap和Vue實(shí)現(xiàn)用戶(hù)信息的編輯刪除功能

    這篇文章主要介紹了使用Bootstrap和Vue實(shí)現(xiàn)用戶(hù)信息的編輯刪除功能,需要的朋友可以參考下
    2017-10-10
  • 用js來(lái)解決ajax讀取頁(yè)面亂碼

    用js來(lái)解決ajax讀取頁(yè)面亂碼

    前兩天寫(xiě)過(guò)服務(wù)端的,可以解決所有的瀏覽器讀取中文亂碼的問(wèn)題,總是有點(diǎn)不爽,憋了一天,想出這個(gè)東東來(lái),能解決firefox和ie讀中文亂碼的問(wèn)題,opera不行,chome也沒(méi)測(cè)試,暫且放著吧。
    2010-11-11
  • JavaScript前端實(shí)現(xiàn)快照的示例代碼

    JavaScript前端實(shí)現(xiàn)快照的示例代碼

    snapshot 翻譯為快照,用于直觀獲取頁(yè)面在某個(gè)運(yùn)行時(shí)的狀態(tài),本文主要為大家詳細(xì)介紹 snapshot 工具實(shí)現(xiàn)的原理,以及其在項(xiàng)目中的使用,需要的可以參考下
    2023-11-11
  • 微信小程序頁(yè)面間傳遞數(shù)組對(duì)象方法解析

    微信小程序頁(yè)面間傳遞數(shù)組對(duì)象方法解析

    這篇文章主要介紹了微信小程序頁(yè)面間傳遞數(shù)組對(duì)象方法解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • JavaScript使用canvas實(shí)現(xiàn)手寫(xiě)簽名功能

    JavaScript使用canvas實(shí)現(xiàn)手寫(xiě)簽名功能

    最近遇到一個(gè)h5手寫(xiě)簽名的需求,按理說(shuō)這種功能網(wǎng)上隨便一搜一大把現(xiàn)成的源碼和組件,但是像這種比較經(jīng)典又很簡(jiǎn)單的功能,還是要弄清楚到底怎么實(shí)現(xiàn)的,所以接下來(lái)本文就給大家介紹一下如何用canvas實(shí)現(xiàn)手寫(xiě)簽名功能
    2023-08-08

最新評(píng)論

绿春县| 五家渠市| 凤山县| 大方县| 巴南区| 舞钢市| 义乌市| 石台县| 南雄市| 柏乡县| 常德市| 桂东县| 巴林右旗| 荔浦县| 平度市| 武功县| 阿鲁科尔沁旗| 南城县| 大洼县| 襄樊市| 大安市| 清苑县| 勃利县| 宜昌市| 钦州市| 神木县| 安多县| 海晏县| 青河县| 乡宁县| 亳州市| 长泰县| 沂南县| 荥阳市| 惠来县| 张家港市| 留坝县| 华容县| 正蓝旗| 岳普湖县| 南川市|