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

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

 更新時間:2019年02月20日 15:13:45   作者:jingchenxu  
這篇文章主要介紹了Vue 后臺管理類項目兼容IE9+的方法示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

最近項目進入到了第三方集成的環(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)過自己的一番測試,目前主要有以下的兼容問題:

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

如何解決這些問題

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

 

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

第三個問題的解決過程比較的曲折,系統(tǒng)的下載是同過接口返回文件流的形式進行下載的,可以看下我原來的代碼,原先通過axios的攔截器來獲取響應(yīng)內(nèi)容的格式,然后進行下載,但是在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);
};
// 攔截二進制響應(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這個屬性是不存在的,就算存在了,在進行文件下載時也會出現(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 瀏覽器進行下載
  window.navigator.msSaveBlob(blob, filename)
  } else {
  // 非瀏覽器進行下載
  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í)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • VUE項目調(diào)用高德地圖的詳細步驟

    VUE項目調(diào)用高德地圖的詳細步驟

    要在Web頁面中加入地圖,我推薦你使用高德地圖JSAPI,下面這篇文章主要給大家介紹了關(guān)于VUE項目調(diào)用高德地圖的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-05-05
  • vue中使用v-model完成組件間的通信

    vue中使用v-model完成組件間的通信

    vue中有一個很神奇的東西叫v-model,它可以完成我們的需求。,本文重點給大家介紹vue中使用v-model完成組件間的通信,需要的朋友可以參考下
    2019-08-08
  • Vue一次性簡潔明了引入所有公共組件的方法

    Vue一次性簡潔明了引入所有公共組件的方法

    這篇文章主要介紹了Vue一次性簡潔明了引入所有公共組件的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-11-11
  • 基于el-table封裝的可拖拽行列、選擇列組件的實現(xiàn)

    基于el-table封裝的可拖拽行列、選擇列組件的實現(xiàn)

    本文主要介紹了基于el-table封裝的可拖拽行列、選擇列組件的實現(xiàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • vue 實現(xiàn)cli3.0中使用proxy進行代理轉(zhuǎn)發(fā)

    vue 實現(xiàn)cli3.0中使用proxy進行代理轉(zhuǎn)發(fā)

    今天小編就為大家分享一篇vue 實現(xiàn)cli3.0中使用proxy進行代理轉(zhuǎn)發(fā),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-10-10
  • 解決vue3.0運行項目warning Insert `·` prettier/prettier問題

    解決vue3.0運行項目warning Insert `·` prettier/pret

    這篇文章主要介紹了解決vue3.0運行項目warning Insert `·` prettier/prettier問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • Vue3中的h函數(shù)及使用小結(jié)

    Vue3中的h函數(shù)及使用小結(jié)

    這篇文章主要介紹了Vue3中的h函數(shù)及使用小結(jié),本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-03-03
  • Vue替代marquee標簽超出寬度文字橫向滾動效果

    Vue替代marquee標簽超出寬度文字橫向滾動效果

    這篇文章主要介紹了Vue替代marquee標簽超出寬度文字橫向滾動效果,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-12-12
  • vue中el-autocomplete與el-select的異同

    vue中el-autocomplete與el-select的異同

    本文主要介紹了vue中el-autocomplete與el-select的異同,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • Pinia 的 Setup Stores 語法使用實例詳解

    Pinia 的 Setup Stores 語法使用實例詳解

    這篇文章主要為大家介紹了Pinia 的 Setup Stores 語法使用實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-09-09

最新評論

博乐市| 晋城| 历史| 龙门县| 黔西县| 石棉县| 宁化县| 游戏| 仙游县| 鲁山县| 台山市| 武穴市| 新乡县| 金坛市| 沈阳市| 澄江县| 资中县| 邯郸县| 新津县| 吐鲁番市| 商丘市| 任丘市| 庆阳市| 乐陵市| 库伦旗| 深州市| 女性| 武宁县| 安宁市| 大渡口区| 常熟市| 平陆县| 虹口区| 桂阳县| 洪雅县| 汉阴县| 长葛市| 酉阳| 东光县| 岳阳县| 高要市|