返回顶部
首页 > 资讯 > 前端开发 > html >Vue中后台管理类项目兼容IE9+的示例分析
  • 403
分享到

Vue中后台管理类项目兼容IE9+的示例分析

2024-04-02 19:04:59 403人浏览 薄情痞子
摘要

小编给大家分享一下Vue中后台管理类项目兼容IE9+的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!目前后台管理系统前端

小编给大家分享一下Vue中后台管理类项目兼容IE9+的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

目前后台管理系统前端搭建方式

目前系统是用vue-cli@2.0生成的,UI框架使用的是iview,ajax请求使用的是axois,此外就没有什么特殊的npm包了。

需要解决的兼容问题

经过自己的一番测试,目前主要有以下的兼容问题:

  • 在IE下由于没有promise,所以axiOS不能用了;

  • 在涉及到flex、fixed、absolute定位时,IE浏览器下的显示效果有较大的区别;

  • excel表单导出异常;

  • 部分使用的npm包中的代码未经编译会有一些es6的语法;

  • vue-router路由失效;

  • IE自动缓存ajax请求结果。

如何解决这些问题

解决第一个问题需要在项目中引入babel-polyfill, 我的处理方式时在build->webpack.base.config.js文件中的添加一下的配置:

Vue中后台管理类项目兼容IE9+的示例分析 

解决第二个问题则需要自己写一些兼容性比较好的样式,在这里我就不做过多的解释了;

第三个问题的解决过程比较的曲折,系统的下载是同过接口返回文件流的形式进行下载的,可以看下我原来的代码,原先通过axios的拦截器来获取响应内容的格式,然后进行下载,但是在IE的兼容测试过程中发现了一个问题,那就是axios在chrome和IE下的表现不一致,具体哪里一致可以简单的说下:

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);
};
// 拦截二进制响应流
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这个属性是不存在的,就算存在了,在进行文件下载时也会出现异常,后台看到很多人都出现了这样的问题,怎么办,我相信这个问题一定是可以解决的,虽然没有搜到合适的方案,但是一个网友提示这一切的问题都是使用了第三方封装的ajax请求,那为什么不自己手写一个原生的ajax请求呢?切换思路后发现,果然是可以的,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('导出错误')
 }
 }

 xhr.send()
}

第四个问题同样还是一些WEBpack打包的问题,在vue-cli2.0生成的项目中,哪些js会使用babel-loader是这样配置的:

Vue中后台管理类项目兼容IE9+的示例分析

我们可以看到,其针对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个问题是过了一段时候发现的,IE会自动的缓存请求的结果,那么对系统中的一些操作是有影响的,比如说是在数据保存完成之后回到列表页的刷新,取到的数据是缓存中的数据。怎么办,我们可以在axios的请求拦截器中自动为请求地址添加时间戳,保证每次的请求的地址是不一样的。

以上是“Vue中后台管理类项目兼容IE9+的示例分析”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网html频道!

--结束END--

本文标题: Vue中后台管理类项目兼容IE9+的示例分析

本文链接: https://lsjlt.com/news/75941.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Vue中后台管理类项目兼容IE9+的示例分析
    小编给大家分享一下Vue中后台管理类项目兼容IE9+的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!目前后台管理系统前端...
    99+
    2024-04-02
  • Vue后台管理系统开发的示例分析
    这篇文章给大家分享的是有关Vue后台管理系统开发的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。在后台管理系统的日常开发过程中发现对于同一个业务下面的版块不同的开发同事每...
    99+
    2024-04-02
  • vue后台管理系统权限控制的示例分析
    这篇文章主要介绍vue后台管理系统权限控制的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!权限控制需求因为是单页面应用,路由交给前端来控制,对于一些需要特定权限才能查看的信息...
    99+
    2024-04-02
  • vue后台系统管理项目之角色权限分配管理功能(示例详解)
    目录角色权限分配管理功能role.vue模块1.查询重置搜索2.table列表3.分页4.新建/编辑角色弹窗5.接口引入6.data定义7.methods方法8.created加载角...
    99+
    2024-04-02
  • vue后台管理添加多语言功能的示例分析
    这篇文章主要介绍了vue后台管理添加多语言功能的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。为什么要使用VueVue是一款友好的、多用途且高性能的JavaScrip...
    99+
    2023-06-14
  • vue中项目结构的示例分析
    这篇文章主要为大家展示了“vue中项目结构的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“vue中项目结构的示例分析”这篇文章吧。新建一个项目之后,我们...
    99+
    2024-04-02
  • Vue+iview+webpack中ie浏览器兼容处理的示例分析
    这篇文章主要介绍Vue+iview+webpack中ie浏览器兼容处理的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!环境介绍:vue: ^2.5.2iview: ^3.1....
    99+
    2024-04-02
  • js中DOM2兼容处理this的示例分析
    这篇文章主要介绍js中DOM2兼容处理this的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!DOM2级存在的兼容问题,这里先说一下this的问题。 function&nbs...
    99+
    2024-04-02
  • vue项目实战的示例分析
    这篇文章主要为大家展示了“vue项目实战的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“vue项目实战的示例分析”这篇文章...
    99+
    2024-04-02
  • vue-cli中项目结构的示例分析
    小编给大家分享一下vue-cli中项目结构的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!总体框架一个vue-cli的项...
    99+
    2024-04-02
  • node vue项目开发之前后端分离的示例分析
    这篇文章主要介绍node vue项目开发之前后端分离的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!node vue项目开发最近看了近一周的vue开发,有诸多感触,我之前接触...
    99+
    2024-04-02
  • border-radius IE8兼容处理的示例分析
    这篇文章将为大家详细讲解有关border-radius IE8兼容处理的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。根据canisue(http://caniu...
    99+
    2024-04-02
  • Vue+Django项目部署的示例分析
    这篇文章主要介绍Vue+Django项目部署的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!本地项目配置1 复制 luffy/settings/dev.py为prop.py修...
    99+
    2024-04-02
  • 浏览器中兼容性的示例分析
    小编给大家分享一下浏览器中兼容性的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!浏览器就是2大派系,一个是其他浏览器,一...
    99+
    2024-04-02
  • bootstrap和IE8兼容性处理的示例分析
    这篇文章主要介绍了bootstrap和IE8兼容性处理的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。bootstrap IE8 兼...
    99+
    2024-04-02
  • vue中引入mousewheel事件及兼容性处理方式的示例分析
    小编给大家分享一下vue中引入mousewheel事件及兼容性处理方式的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!引入mousewheel事件及兼容性处理项目实现过程中需要对一个已经有纵向滚动条的table表格...
    99+
    2023-06-29
  • vue项目中axios封装请求的示例分析
    小编给大家分享一下vue项目中axios封装请求的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!一、简介axios 是一个轻量的HTTP客户端,它基于 XMLHttpRequest 服务来执行 HTTP 请求,支持...
    99+
    2023-06-29
  • vue项目打包优化的示例分析
    小编给大家分享一下vue项目打包优化的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!使用vue-cli部署生产包时,发现...
    99+
    2024-04-02
  • webstorm+vue初始化项目的示例分析
    小编给大家分享一下webstorm+vue初始化项目的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!vue新项目准备:1、安装nodejs,官网下载傻瓜安装node -v 验证2、...
    99+
    2024-04-02
  • Vue后台管理系统之实现分页功能示例
    本文主要介绍了Vue后台管理系统之实现分页功能,分享给大家,具体如下: 效果图: 功能描述: 显示数据的总数目 可选择每天的显示条数 点击页码跳转到指定页...
    99+
    2024-04-02
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作