vue項(xiàng)目兼容ie11的實(shí)現(xiàn)方法
前情提要
事情的起因是項(xiàng)目在設(shè)計(jì)之初要求兼容IE11,也在開發(fā)之初對(duì)此做了處理,但在經(jīng)過兩年的多的迭代后,經(jīng)過大幾十個(gè)人的手之后,該項(xiàng)目被引入了大量的插件,又由于不經(jīng)常使用IE瀏覽器導(dǎo)致不知道什么時(shí)候項(xiàng)目就已經(jīng)不兼容IE11了。但是領(lǐng)導(dǎo)是使用IE瀏覽器的,突然哪天翻看項(xiàng)目網(wǎng)頁的時(shí)候,打不開了。于是從上頭被罵了,我們被要求將手上所有的項(xiàng)目都對(duì)IE11以及其他市面上的瀏覽器做兼容處理。
經(jīng)過(一)
對(duì)于Chrome瀏覽器沒啥好說的,是目前對(duì)開發(fā)者最有好的瀏覽器,但是IE11就不干了,撂挑子了。經(jīng)過多個(gè)瀏覽器的測(cè)試,發(fā)現(xiàn)就IE瀏覽器不行,連首屏都加載失敗。
經(jīng)過(二)
在本地啟動(dòng)項(xiàng)目后,然后打開IE的開發(fā)者控制臺(tái),會(huì)發(fā)現(xiàn)報(bào)了語法錯(cuò)誤,
然后告訴你是哪個(gè)文件的哪一行。點(diǎn)進(jìn)去一看,沒錯(cuò),都是經(jīng)過webpack編譯壓縮后的代碼,看的頭昏眼花。 (可能你遇到的問題所報(bào)的文件和行數(shù)列數(shù)跟我的不一樣,但是原因都是一樣的,后面會(huì)講。)
經(jīng)過(三)
經(jīng)過一系列的排查和定位,最終發(fā)現(xiàn)了問題。上面這個(gè)問題的原因是sockjs-client這個(gè)插件里使用了非ES5的語法,導(dǎo)致IE瀏覽器無法解析,所以報(bào)了語法錯(cuò)誤。這個(gè)時(shí)候有人該罵了,webpack的babel不就是將非ES5的語法轉(zhuǎn)成ES5語法的嗎,你到底懂不懂,到底不會(huì)不會(huì)?對(duì)啊,不是有babel轉(zhuǎn)譯嘛,為啥還會(huì)報(bào)語法錯(cuò)誤?原來這是因?yàn)閣ebpack默認(rèn)不會(huì)對(duì)node_modules中的插件進(jìn)行轉(zhuǎn)譯,需要在vue.config.js中進(jìn)行配置。該屬性名叫:transpileDependencies,接收一個(gè)數(shù)組作為屬性值,然后把node_modules中需要babel轉(zhuǎn)譯的插件名輸入進(jìn)去,就可以了。
module.exports = { ... transpileDenpendencies: [ 'sockjs-client' ] }
經(jīng)過(四)
處理完上面的問題之后大多數(shù)情況下,問題就已經(jīng)解決了,但是比較神奇的是有的時(shí)候還是不行,那是因?yàn)檫€有一個(gè)地方需要坐下修改,那就是.browserslistrc文件中的:not dead 改成:not ie <= 11
- 問題:這個(gè)文件有啥用呢?
- 單獨(dú)這個(gè)文件是沒有用的。
- 但是他會(huì)配合@babel/preset-env和Autoprefixer用來確定需要轉(zhuǎn)譯的Javascript特性和需要添加的css瀏覽器前綴
最后
除了上述的問題,還遇到了一個(gè)問題,那就是加密插件引起的:jsencrypt。引入的方式有兩種: - import JSEncrypt from 'jsencrypt' - import { JSEncrypt } from 'jsencrypt' 第一種方式IE不兼容,第二種IE是兼容的。
附加
在對(duì)一個(gè)vue2+ts的項(xiàng)目中發(fā)現(xiàn)vue-property-decorator插件也是使用了非ES5語法導(dǎo)致IE11無法兼容。
總結(jié)
其實(shí)上面的sockjs-client一般情況下只會(huì)在本地出現(xiàn),因?yàn)楸镜貑?dòng)的服務(wù)本質(zhì)是啟動(dòng)的socket服務(wù),而發(fā)布到線上的代碼是經(jīng)過打包后的代碼,跟socketjs-client不發(fā)生關(guān)系,除非你項(xiàng)目中用到了webSocket
到此這篇關(guān)于vue項(xiàng)目兼容ie11的實(shí)現(xiàn)方法的文章就介紹到這了,更多相關(guān)vue項(xiàng)目兼容ie11內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Vue2.0在IE11版本瀏覽器中的兼容性問題
- VueCli3中兼容IE11配置的艱苦歷程
- VUE 項(xiàng)目在IE11白屏報(bào)錯(cuò) SCRIPT1002: 語法錯(cuò)誤的解決
- IE11下處理Promise及Vue的單項(xiàng)數(shù)據(jù)流問題
- vue+iview 兼容IE11瀏覽器的實(shí)現(xiàn)方法
- 解決IE11 vue +webpack 項(xiàng)目中數(shù)據(jù)更新后頁面沒有刷新的問題
- Vue 2.0在IE11中打開項(xiàng)目頁面空白的問題解決
- Vue.js項(xiàng)目在IE11白屏報(bào)錯(cuò)的解決方法
相關(guān)文章
使用vue-cli3 創(chuàng)建vue項(xiàng)目并配置VS Code 自動(dòng)代碼格式化 vue語法高亮問題
這篇文章主要介紹了使用vue-cli3 創(chuàng)建vue項(xiàng)目,并配置VS Code 自動(dòng)代碼格式化 vue語法高亮問題,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-05-05vue select二級(jí)聯(lián)動(dòng)第二級(jí)默認(rèn)選中第一個(gè)option值的實(shí)例
下面小編就為大家分享一篇vue select二級(jí)聯(lián)動(dòng)第二級(jí)默認(rèn)選中第一個(gè)option值的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-01-01element-UI?el-table樹形數(shù)據(jù)?修改小三角圖標(biāo)方式
這篇文章主要介紹了element-UI?el-table樹形數(shù)據(jù)?修改小三角圖標(biāo)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07Vue-CLI 3 scp2自動(dòng)部署項(xiàng)目至服務(wù)器的方法
這篇文章主要介紹了Vue-CLI 3 scp2自動(dòng)部署項(xiàng)目至服務(wù)器的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07axios中如何進(jìn)行同步請(qǐng)求(async+await)
這篇文章主要介紹了axios中如何進(jìn)行同步請(qǐng)求(async+await),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-09-09解決v-for中使用v-if或者v-bind:class失效的問題
今天小編就為大家分享一篇解決v-for中使用v-if或者v-bind:class失效的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-09-09element多個(gè)表單校驗(yàn)的實(shí)現(xiàn)
在項(xiàng)目中,經(jīng)常會(huì)遇到表單檢驗(yàn),在這里我分享在實(shí)際項(xiàng)目中遇到多個(gè)表單同時(shí)進(jìn)行校驗(yàn)以及我的解決方法,感興趣的可以了解一下2021-05-05Vue3中內(nèi)置組件Teleport的基本使用與典型案例
Teleport是一種能夠?qū)⑽覀兊哪0逡苿?dòng)到DOM中Vue app之外的其他位置的技術(shù),下面這篇文章主要給大家介紹了關(guān)于Vue3中內(nèi)置組件Teleport的基本使用與典型案例的相關(guān)資料,需要的朋友可以參考下2023-04-04