Vue在ie10下空白页的debug小记

2

前几天写的一段Vue,在ie下一片空白,f12显示script1003: expected :

baidu、google之,说是json最后一项有多余的逗号,例如

{
  a: 5,
  b: 4, // 最后一项不能有逗号
}

检索修正所有js文件不表,然而情况依旧。。。
没办法了,祭出无敌睿智debug技巧: 全文注释掉,再一行一行解掉注释,终于定位到bug位置: 一个自定义右键菜单的插件(v-contextmenu)有问题。。。

继续先前的睿智debug技巧,终于发现,好几个bug。。。

  1. 该插件下,所有对象最后一项都有逗号,导致在ie下不兼容
{
  a: 5,
  b: 4, // 这个逗号要删除
}
  1. 该插件的export default语法与ie不兼容
// ie下不支持这种语法
export default {
  bind() {}
}
// 必须在外面定义 function bind() {} 然后
export default {
  bind: bind
}

// 特别告诫,下面这种语法在ie中也是不支持的
export default {
  bind
}
  1. 最重要的,这个插件在一个很隐蔽的地方有这么两行代码
if(condition) {
  someArray.push({ a, b })
} else {
  anotherArray.push({ a, b })
}

{ a, b }这种语法是ie不支持的,必须改成{ a: a, b: b }

一个上午就这么浪费了,你以为我要喷这个插件?我想说,谁用ie谁是狗🐶

你可能感兴趣的

WoodenSail · 2018年05月01日

我觉得吧,你有两个问题,第一是没上babel。第二则是看到白屏第一反应就应该是语法不兼容的导致的parse失败好不好。
一般看到白屏等疑似js未执行的情况首先就是在js头部增加一个alert()。如果是parse失败则该alert不会执行。
确认是语法不兼容后,把代码全粘到ws中js版本设为es5.1看有什么地方用了es6语法还没编译掉就行。

这个算是常见问题了,5分钟解决的事儿。

+1 回复

0

首先,有一点必须要承认的,我确实是经验不足。

其次,有babel。我使用的是vue-cli,或许是配置的问题,根本没有转译引入的插件中的{ a, a}语法。

如上所述,还是经验问题,比方说现在我再也不会在对象的末项加逗号,可是之前不是不知道嘛。所有的js文件,有的有痘号,有的没逗号,要一个一个找过去删掉,我当时用的正则和nodepad++的文件检索功能,是还有什么更有效率的工具方法能一键删掉对象中的末项逗号吗?并且,之前用的都是大插件,比较稳定,确实没想到插件的代码不规范(对象末项加逗号应该属于代码不规范吧?)。

还有你提到的ws,说实话我都不知道是什么东西,敬请赐教/抱拳

东方小明 作者 · 2018年05月01日
0

@东方小明 webstorm,前端常用的ide。里面内置语法检查的功能。搭配es-lint使用效果更佳。

WoodenSail · 2018年05月01日
0

我用的sublime,es-lint本来是用的,好像是一定要在行末加逗号还是什么来着,跟我的习惯有点出入,被我关闭了。

东方小明 作者 · 2018年05月01日
hping · 2018年11月28日

html加上这个

<!--[if lt IE 10]>
      <script src="https://cdn.bootcss.com/babel-polyfill/7.0.0-beta.49/polyfill.min.js"</script>
<![endif]-->

回复

0

polyfill是有的,我是直接在webpack中设置后在入口文件引入的。

之前的问题是上一个回复指出的没有设置ES6语法转译。

东方小明 作者 · 2018年11月28日
载入中...