1. 判断IE浏览器版本
// 获取IE版本
function IEVersion() {
// 取得浏览器的userAgent字符串
var userAgent = navigator.userAgent;
// 判断是否为小于IE11的浏览器
var isLessIE11 = userAgent.indexOf('compatible') > -1 && userAgent.indexOf('MSIE') > -1;
// 判断是否为IE的Edge浏览器
var isEdge = userAgent.indexOf('Edge') > -1 && !isLessIE11;
// 判断是否为IE11浏览器
var isIE11 = userAgent.indexOf('Trident') > -1 && userAgent.indexOf('rv:11.0') > -1;
if (isLessIE11) {
var IEReg = new RegExp('MSIE (\\d+\\.\\d+);');
// 正则表达式匹配浏览器的userAgent字符串中MSIE后的数字部分,,这一步不可省略!!!
IEReg.test(userAgent);
// 取正则表达式中第一个小括号里匹配到的值
var IEVersionNum = parseFloat(RegExp['$1']);
if (IEVersionNum === 7) {
// IE7
return 7
} else if (IEVersionNum === 8) {
// IE8
return 8
} else if (IEVersionNum === 9) {
// IE9
return 9
} else if (IEVersionNum === 10) {
// IE10
return 10
} else {
// IE版本<7
return 6
}
} else if (isEdge) {
// edge
return 'edge'
} else if (isIE11) {
// IE11
return 11
} else {
// 不是ie浏览器
return -1
}
}
2. Vue-cli3 IE报 "Vuex requires a Promise polyfill in this browser"错误。
原因:因为使用了ES6 Promise,而IE浏览器不支持。
解决办法步骤:
(1)安装 babel-polyfill 。 babel-polyfill可以模拟ES6使用的环境,可以使用ES6的所有新方法
npm install --save-dev babel-polyfill
(2) 配置 babel.config.js
module.export = {
presets:[
['@vue/app',{ useBuiltIns: 'entry'}]
]
}
(3) 在每个入口文件上方添加
import '@babel/polyfill'
(4) 重启项目
3. 第三方依赖兼容性问题
默认情况下babel-loader会忽略所有node_modules 中的文件。如果想显式转义一个依赖,可以配置transpileDependencies。
module.exports = {
transpileDependencies: ["sl-vue-tree"] // 需要编译的依赖包名
}
4. javascript 中newDate()的浏览器兼容性问题,IE、safari 的new Date()的值为Invalid Date、NaN-NaN 的问题。
解决办法:可将 - 替换为 /,斜杠通用于所有浏览器
let dateStr = data.repalace(/-/g, '/'); let date = new Date(dateStr)
问题分析:主要的变化是对默认的日期格式进行了转换,基于‘/’格式的日期字符串,才是被各浏览器所广泛支持的,‘-‘连接的日期字符串则是只在Chrome下可以正常工作,
5. VUE路由IE浏览器中的路由跳转后页面不变更问题
解决在IE11上无法用router-link和a标签跳转问题,主要是当url的hashchange的时候浏览器没有做出反应。里面主要是做了一个兼容。
情景一:iframe标签跳转问题
vue项目,利用router控制页面切换,切换的页面内容都是通过iframe标签嵌套展示,chrome下切换时访问正常,但是在IE浏览器出现了一个奇怪的问题:点击切换后,浏览器的地址栏路径发生切换,但是页面没有更新,还是切换之前的内容,打开F12查看iframe标签的src属性,发现src属性没有更新过来。
IE下的这个现象很是奇怪,最终的解决办法是:由于点击切换时,浏览器地址栏路径发生变化,通过强制刷新页面来实现页面内容切换。
具体实现细节如下:在切换页面按钮的文件中监听路由变化,当路由变化时判断浏览器是否为IE,如果是IE,则强制刷新
// 判断浏览器是否为IE
const isIE = (
/MSIE (\d+\.\d+);/.test(navigator.userAgent) || ~navigator.userAgent.indexOf('Trident/')
)
// 监听路由
watch: {
'$route' (to, from) {
if (isIE) {
window.location.reload()
}
}
},
总结:对于通过iframe标签嵌套组成的页面切换,如果在IE浏览器下发生路由变化页面不更新的问题,可以通过监听路由并强制刷新页面的方法来解决。
情景二:在ie11上从当前A页面(/a)跳转B页面(/b),在地址栏直接修改路由回车跳转B页面,发现页面还是A页面,但是地址栏地址已经是B页面地址。而且控制台并无报错。
mounted () {
if (!!window.ActiveXObject || 'ActiveXObject' in window) {
window.addEventListener('hashchange', () => {
let currentPath = window.location.hash.slice(1)
if (this.$route.path !== currentPath) {
this.$router.push(currentPath)
}
}, false)
}
}
6. vue+element 键盘回车事件导致页面刷新的问题。
当一个form原始只有一个input框时,在该输入框中按下回车应提交该表单。如果希望阻止这一默认行为,可以在标签上添加@submit.native.prevent.
<input @submit.native.prevent></input>
7.element日期组件不显示问题
添加:
value-format = "yyyy-MM-dd" 升级element版本
来源:https://www.cnblogs.com/yisaa/p/12396691.html