详解一次Vue低版本安卓白屏问题的解决过程


Posted in Javascript onMay 30, 2019

因为业务需要一定要使用安卓4.4的webview浏览页面,测试的时候发生了白屏问题,很自然想到使用babel转换部分ES6语法.

Babel 转换 Promise 和 Symbol ES6语法的配置

# 两项都需要放到生产依赖
npm install babel-polyfill --save
npm install es6-promise --save
// main.js
import 'babel-polyfill';
import Es6Promise from 'es6-promise';

Es6Promise.polyfill();
// babel.config.js

process.env.VUE_CLI_BABEL_TRANSPILE_MODULES = true;

module.exports = {
 presets: [
  [
   '@vue/app',
   {
    useBuiltIns: 'entry',
    polyfills: [
     'es6.promise',
     'es6.symbol',
    ],
   },
  ],
 ],
 plugins,
};
// 使用vue cli3构建的vue项目
// vue.config.js
module.exports = {
 transpileDependencies: ['webpack-dev-server/client'],
 chainWebpack: (config) => {
 config.entry.app = ['babel-polyfill', './src/main.js'];
 }
}

但结果还是白屏,那么决定使用Babel把语法转换成安卓4.4以上,应该没有问题了。

// .browserslistrc
>= 1%
last 1 major version
not dead
Android >= 4.4

不同运行环境下的严格模式

结果还是白屏,查阅众多网络文章,同样没有很好的答案...

百思不得其解,无奈之下在 Android Studio 上下载了个4.4的模拟器,在内置浏览器上打开页面,使用 Chrome 远程调试 Android 上的浏览器, 在 Chrome 上地址栏输入 chrome://inspect/#devices 选择相应模拟器设备的 inspect 就会弹出 console 调试。

没想到发现报错是 Uncaught SyntaxError: Duplicate data property in object literal not allowed in strict mode ,意思是在严格模式下的对象里不能重复定义相同属性,但是这在现代浏览器(Chrome)的严格模式上运行是没有问题的,其结果是后定义的属性值会覆盖前定义的属性值,例如:

'use strict'
var test = {
 a: 1,
 a: 2,
}
// 结果test会定义成 => {a: 2}

但是为什么会这样呢,在打包后的报错js文件里将其格式化后发现是组件的属性重复定义了,

<van-nav-bar
 title="标题"
 left-text="返回"
 right-text="按钮"
 left-arrow
 @click-left="onClickLeft"
 @click-right="onClickRight"
 :left-arrow="true"
/>

我的项目里 Vant 的 left-arrow 被我重复定义了,组件会被转义成js:

详解一次Vue低版本安卓白屏问题的解决过程

所以说不同运行环境的严格模式还是会有不一样的结果,

在网上查了下资料总结了严格模式下的几种错误:

1. 我上面遇到的对象属性重复定义

2. 在函数声明中相同的参数名

SyntaxError: Strict mode function may not have duplicate parameter names.

例如:

function fix(a,b,a) {   
   return a+b;   
 }

3. 用前导0声明8进制直接量

SyntaxError: Octal literals are not allowed in strict mode.

var a = 012;

4. 在eval中声明变量、重新声明、删除或重写eval和arguments这两个标示符

SyntaxError: Assignment to eval or arguments is not allowed in strict mode.

例如:

'use strict';
eval('var foo = 2');

5. 用delete删除显示声明的标识符、名称和具名函数

SyntaxError: Delete of an unqualified identifier in strict mode.

例如:

function temp() { 
 'use strict'; 
 var test = 1; 
 delete test; 
}

6. 代码中使用扩展的保留字,例如 interface , let , yield , package , private 等

SyntaxError: Unexpected strict mode reserved word

7. 使用了 with

SyntaxError: Strict mode code may not include a with statement

8. 函数中不可访问caller、callee以及arguments

例如:

function foo(){
 'use strict';
 foo.caller;  // TypeError
 foo.arguments; // TypeError
 arguments.callee; // TypeError
}
foo();

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
node.js读取文件到字符串的方法
Jun 29 Javascript
EasyUi combotree 实现动态加载树节点
Apr 01 Javascript
Bootstrap对话框使用实例讲解
Sep 24 Javascript
HTML中setCapture、releaseCapture 使用方法浅析
Sep 25 Javascript
Node.js与MySQL交互操作及其注意事项
Oct 05 Javascript
Angular2表单自定义验证器的实现
Oct 19 Javascript
最好用的Bootstrap fileinput.js文件上传组件
Dec 12 Javascript
简单实现js轮播图效果
Jul 14 Javascript
浅谈AngularJS中$http服务的简单用法
May 15 Javascript
Layui 解决表格异步调用后台分页的问题
Oct 26 Javascript
vue实现打地鼠小游戏
Aug 21 Javascript
vue打包时去掉所有的console.log
Apr 10 Vue.js
基于iview的router常用控制方式
May 30 #Javascript
深入了解js原型模式
May 30 #Javascript
js逆向解密之网络爬虫
May 30 #Javascript
Vue.js中的组件系统
May 30 #Javascript
Vue+Django项目部署详解
May 30 #Javascript
了解重排与重绘
May 29 #Javascript
小程序如何构建骨架屏
May 29 #Javascript
You might like
用PHP发电子邮件
2006/10/09 PHP
PHP读书笔记整理_结构语句详解
2016/07/01 PHP
在Javascript中为String对象添加trim,ltrim,rtrim方法
2006/09/22 Javascript
JavaScript 学习历程和心得分享
2010/12/12 Javascript
div拖拽插件——JQ.MoveBox.js(自制JQ插件)
2013/05/17 Javascript
ExtJS4如何自动生成控制grid的列显示、隐藏的checkbox
2014/05/02 Javascript
js数组的基本操作(很全自己整理的)
2014/10/16 Javascript
jQuery中大家不太了解的几个方法
2015/03/04 Javascript
理解jquery事件冒泡
2016/01/03 Javascript
深入理解jQuery事件绑定
2016/06/02 Javascript
JavaScript利用正则表达式替换字符串中的内容
2016/12/12 Javascript
AngularJS Toaster使用详解
2017/02/24 Javascript
Vue的MVVM实现方法
2017/08/16 Javascript
js中时间格式化的几种方法
2018/07/22 Javascript
小程序tab页无法传递参数的方法
2018/08/03 Javascript
css配合JavaScript实现tab标签切换效果
2018/10/11 Javascript
Three.js实现3D机房效果
2018/12/30 Javascript
vue-property-decorator用法详解
2019/12/12 Javascript
NodeJS配置CORS实现过程详解
2020/12/02 NodeJs
[04:42]2015国际邀请赛CDEC战队晋级之路
2015/08/13 DOTA
Python中运行并行任务技巧
2015/02/26 Python
使用Python中的cookielib模拟登录网站
2015/04/09 Python
python编写暴力破解zip文档程序的实例讲解
2018/04/24 Python
opencv之为图像添加边界的方法示例
2019/12/26 Python
Python实现仿射密码的思路详解
2020/04/23 Python
Python下载网易云歌单歌曲的示例代码
2020/08/12 Python
初一家长会邀请函
2014/01/31 职场文书
房地产财务管理制度
2014/02/02 职场文书
工业设计毕业生自荐信
2014/04/13 职场文书
《槐乡五月》教学反思
2014/04/25 职场文书
优秀班组事迹材料
2014/12/24 职场文书
中国梦党课学习心得体会
2016/01/05 职场文书
初中地理教学反思
2016/02/19 职场文书
golang中的空接口使用详解
2021/03/30 Python
Nginx HTTP跳转至HTTPS
2022/05/15 Servers
Spring IOC容器Bean的作用域及生命周期实例
2022/05/30 Java/Android