<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當(dāng)前位置: 首頁 - 科技 - 知識百科 - 正文

        Vue 后臺管理類項目兼容IE9+的方法示例

        來源:懂視網(wǎng) 責(zé)編:小采 時間:2020-11-27 22:00:45
        文檔

        Vue 后臺管理類項目兼容IE9+的方法示例

        Vue 后臺管理類項目兼容IE9+的方法示例:最近項目進(jìn)入到了第三方集成的環(huán)節(jié),集成第三方監(jiān)控非要用IE,咋辦?老板讓我將后臺管理系統(tǒng)的框架兼容下IE,一直都是在chrome下開發(fā)的,也不知道IE下是什么鬼。 目前后臺管理系統(tǒng)前端搭建方式 目前系統(tǒng)是用vue-cli@2.0生成的,UI框架使用的是iview,a
        推薦度:
        導(dǎo)讀Vue 后臺管理類項目兼容IE9+的方法示例:最近項目進(jìn)入到了第三方集成的環(huán)節(jié),集成第三方監(jiān)控非要用IE,咋辦?老板讓我將后臺管理系統(tǒng)的框架兼容下IE,一直都是在chrome下開發(fā)的,也不知道IE下是什么鬼。 目前后臺管理系統(tǒng)前端搭建方式 目前系統(tǒng)是用vue-cli@2.0生成的,UI框架使用的是iview,a

        最近項目進(jìn)入到了第三方集成的環(huán)節(jié),集成第三方監(jiān)控非要用IE,咋辦?老板讓我將后臺管理系統(tǒng)的框架兼容下IE,一直都是在chrome下開發(fā)的,也不知道IE下是什么鬼。

        目前后臺管理系統(tǒng)前端搭建方式

        目前系統(tǒng)是用vue-cli@2.0生成的,UI框架使用的是iview,ajax請求使用的是axois,此外就沒有什么特殊的npm包了。

        需要解決的兼容問題

        經(jīng)過自己的一番測試,目前主要有以下的兼容問題:

      1. 在IE下由于沒有promise,所以axios不能用了;
      2. 在涉及到flex、fixed、absolute定位時,IE瀏覽器下的顯示效果有較大的區(qū)別;
      3. excel表單導(dǎo)出異常;
      4. 部分使用的npm包中的代碼未經(jīng)編譯會有一些ES6的語法;
      5. vue-router路由失效;
      6. IE自動緩存ajax請求結(jié)果。
      7. 如何解決這些問題

        解決第一個問題需要在項目中引入babel-polyfill, 我的處理方式時在build->webpack.base.config.js文件中的添加一下的配置:

         

        解決第二個問題則需要自己寫一些兼容性比較好的樣式,在這里我就不做過多的解釋了;

        第三個問題的解決過程比較的曲折,系統(tǒng)的下載是同過接口返回文件流的形式進(jìn)行下載的,可以看下我原來的代碼,原先通過axios的攔截器來獲取響應(yīng)內(nèi)容的格式,然后進(jìn)行下載,但是在IE的兼容測試過程中發(fā)現(xiàn)了一個問題,那就是axios在chrome和IE下的表現(xiàn)不一致,具體哪里一致可以簡單的說下:

        const downloadUrl = url => {
         let iframe = document.createElement('iframe');
         iframe.style.display = 'none';
         iframe.src = url;
         iframe.onload = function () {
         document.body.removeChild(iframe);
         };
         document.body.appendChild(iframe);
        };
        // 攔截二進(jìn)制響應(yīng)流
        if (res.headers && (res.headers['content-type'] === 'application/vnd.ms-excel;charset=UTF-8' || res.headers['content-type'] === 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' || res.headers['content-type'] === 'application/octet-stream;charset=UTF-8')) {
        downloadUrl(res.request.responseURL);
        return
        }

        這里面的問題在于在IE瀏覽器中res.request.responseURL這個屬性是不存在的,就算存在了,在進(jìn)行文件下載時也會出現(xiàn)異常,后臺看到很多人都出現(xiàn)了這樣的問題,怎么辦,我相信這個問題一定是可以解決的,雖然沒有搜到合適的方案,但是一個網(wǎng)友提示這一切的問題都是使用了第三方封裝的ajax請求,那為什么不自己手寫一個原生的ajax請求呢?切換思路后發(fā)現(xiàn),果然是可以的,ajax下載文件流可以使用以下代碼:

        utils.exportFiles = (type = 'GET', url = null) => {
         var xhr = null
         if (window.XMLHttpRequest) { // Mozilla 瀏覽器
         xhr = new XMLHttpRequest()
         } else {
         if (window.ActiveXObject) {
         try {
         xhr = new ActiveXObject('Microsoft.XMLHTTP')
         } catch (e) {
         try {
         xhr = new ActiveXObject('Msxml2.XMLHTTP')
         } catch (e) {
         }
         }
         }
         }
        
         xhr.open(type, url, true)
         xhr.responseType = 'blob'
         if (type === 'POST') {
         xhr.setRequestHeader('Content-type', 'application/json')
         }
         xhr.onload = function (res) {
         var contentDisposition = xhr.getResponseHeader('content-disposition')
         var contentType = xhr.getResponseHeader('content-type')
         var filename = contentDisposition.split(';')[2]
         // eslint-disable-next-line no-eval
         eval(filename)
         filename = decodeURI(filename)
         if (this.status === 201) {
         var blob = this.response
         if (typeof window.navigator.msSaveBlob !== 'undefined') {
         // IE 瀏覽器進(jìn)行下載
         window.navigator.msSaveBlob(blob, filename)
         } else {
         // 非瀏覽器進(jìn)行下載
         var downloadUrl = document.createElement('a')
         downloadUrl.download = filename
         downloadUrl.style.display = 'none'
         downloadUrl.href = URL.createObjectURL(blob)
         document.body.appendChild(downloadUrl)
         downloadUrl.click()
         URL.revokeObjectURL(downloadUrl.href)
         document.body.removeChild(downloadUrl)
         }
         } else {
         console.log('導(dǎo)出錯誤')
         }
         }
        
         xhr.send()
        }

        第四個問題同樣還是一些webpack打包的問題,在vue-cli2.0生成的項目中,哪些js會使用babel-loader是這樣配置的:

        我們可以看到,其針對3個文件加的js代碼使用babel-loader,將需要使用babel-loader的npm包添加到其中即可。 第五個問題百度可以搜到,其中我比較推薦的解決方案如下:

        const IE11RouterFix = {
         methods: {
         hashChangeHandler: function () {
         this.$router.push(window.location.hash.substring(1, window.location.hash.length));
         },
         isIE11: function () { return !!window.MSInputMethodContext && !!document.documentMode; }
         },
         mounted: function () { if (this.isIE11()) { window.addEventListener('hashchange', this.hashChangeHandler); } },
         destroyed: function () { if (this.isIE11()) { window.removeEventListener('hashchange', this.hashChangeHandler); } }
        }
        
        export default IE11RouterFix
        
        var vm = new Vue({
        el: '#app',
        router,
        store,
        mixins: [IE11RouterFix],
        components: {
        App,
        },
        template: '<App/>'
        });

        第6個問題是過了一段時候發(fā)現(xiàn)的,IE會自動的緩存請求的結(jié)果,那么對系統(tǒng)中的一些操作是有影響的,比如說是在數(shù)據(jù)保存完成之后回到列表頁的刷新,取到的數(shù)據(jù)是緩存中的數(shù)據(jù)。怎么辦,我們可以在axios的請求攔截器中自動為請求地址添加時間戳,保證每次的請求的地址是不一樣的。

        總結(jié)

        以上耗時一天的IE兼容就完成了,目前只能兼容到IE11,IE10,其他的我已經(jīng)放棄了,就算再兼容完成后,系統(tǒng)再IE10下的表現(xiàn)也不是特別的好,感覺比較卡,再IE11下也只能說是正常。希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

        聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        Vue 后臺管理類項目兼容IE9+的方法示例

        Vue 后臺管理類項目兼容IE9+的方法示例:最近項目進(jìn)入到了第三方集成的環(huán)節(jié),集成第三方監(jiān)控非要用IE,咋辦?老板讓我將后臺管理系統(tǒng)的框架兼容下IE,一直都是在chrome下開發(fā)的,也不知道IE下是什么鬼。 目前后臺管理系統(tǒng)前端搭建方式 目前系統(tǒng)是用vue-cli@2.0生成的,UI框架使用的是iview,a
        推薦度:
        標(biāo)簽: VUE IE 兼容
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 国产成人麻豆亚洲综合无码精品 | 国产精品久久亚洲不卡动漫 | 国产精品美女午夜爽爽爽免费| 亚洲精品无码久久久久| 一级毛片a女人刺激视频免费| 日韩免费一级毛片| 亚洲1区2区3区精华液| 免费A级毛片在线播放不收费| 国产成人亚洲毛片| 亚洲日韩国产成网在线观看| 久久九九免费高清视频| 中文字幕不卡亚洲| 久久大香伊焦在人线免费| 亚洲an天堂an在线观看| 最近免费mv在线电影| 亚洲国产一区在线观看| 岛国片在线免费观看| 特级毛片aaaa级毛片免费| 亚洲国产精品狼友中文久久久| 亚洲免费在线观看| 久久久亚洲欧洲日产国码aⅴ | 国产片免费在线观看| 特色特黄a毛片高清免费观看| a级亚洲片精品久久久久久久| 久久九九全国免费| 亚洲国产av高清无码| 免费人成视网站在线观看不卡| 国产大片免费天天看| 无码乱人伦一区二区亚洲| 青草草色A免费观看在线| 色天使亚洲综合一区二区| 久久精品国产亚洲5555| 久久免费动漫品精老司机| 一本色道久久88—综合亚洲精品| 免费大香伊蕉在人线国产| 久久免费观看视频| 亚洲乱码在线卡一卡二卡新区| 亚洲AV无码乱码在线观看| 99热在线免费观看| 黄色一级免费网站| 91亚洲国产成人久久精品网址|