详解一次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 相关文章推荐
javascript实现原生ajax的几种方法介绍
Sep 21 Javascript
JQuery中form验证出错信息的查看方法
Oct 08 Javascript
JS关闭窗口或JS关闭页面的几种代码分享
Oct 25 Javascript
深入理解JavaScript编程中的原型概念
Jun 25 Javascript
如何解决谷歌浏览器下jquery无法获取图片的尺寸
Sep 10 Javascript
JS实现自动固定顶部的悬浮菜单栏效果
Sep 16 Javascript
12种JavaScript常用的MVC框架比较分析
Nov 16 Javascript
FullCalendar日历插件应用之数据展现(一)
Dec 23 Javascript
微信小程序实现上传图片功能
May 28 Javascript
js实现漂亮的星空背景
Nov 01 Javascript
小程序websocket心跳库(websocket-heartbeat-miniprogram)
Feb 23 Javascript
解决node终端下运行js文件不支持ES6语法
Apr 04 Javascript
基于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读取网页文件内容的实现代码(fopen,curl等)
2011/06/23 PHP
深入分析php中接口与抽象类的区别
2013/06/08 PHP
使用 laravel sms 构建短信验证码发送校验功能
2017/11/06 PHP
PHP implode()函数用法讲解
2019/03/08 PHP
做好七件事帮你提升jQuery的性能
2014/02/06 Javascript
JQuery设置时间段下拉选择实例
2014/12/30 Javascript
JavaScript中的函数嵌套使用
2015/06/04 Javascript
javascript HTML5文件上传FileReader API
2020/03/27 Javascript
浅谈json取值(对象和数组)
2016/06/24 Javascript
AngularJS实现一次监听多个值发生的变化
2016/08/31 Javascript
angularJS+requireJS实现controller及directive的按需加载示例
2017/02/20 Javascript
Vue导出json数据到Excel电子表格的示例
2017/12/04 Javascript
详解vue项目中如何引入全局sass/less变量、function、mixin
2018/06/02 Javascript
laydate如何根据开始时间或者结束时间限制范围
2018/11/15 Javascript
解决Echarts2竖直datazoom滑动后显示数据不全的问题
2020/07/20 Javascript
node.js如何根据URL返回指定的图片详解
2020/10/21 Javascript
利用Python中unittest实现简单的单元测试实例详解
2017/01/09 Python
解决Python requests 报错方法集锦
2017/03/19 Python
详解Python装饰器
2019/03/25 Python
浅谈python3中input输入的使用
2019/08/02 Python
在django中实现页面倒数几秒后自动跳转的例子
2019/08/16 Python
解决Django中checkbox复选框的传值问题
2020/03/31 Python
Python 没有main函数的原因
2020/07/10 Python
Python基于mediainfo批量重命名图片文件
2020/12/29 Python
台湾时尚彩瞳专门店:imeime
2019/08/16 全球购物
阿姆斯特丹城市卡:Amsterdam Pass
2019/12/01 全球购物
耐克亚太地区:Nike APAC
2019/12/07 全球购物
澳大利亚女装精品店:Alannah Hill
2020/07/29 全球购物
AJax面试题
2014/11/25 面试题
大学专科求职信
2014/07/02 职场文书
2014年煤矿安全工作总结
2014/12/04 职场文书
个园导游词
2015/02/04 职场文书
我的长征观后感
2015/06/09 职场文书
Nginx反向代理多个服务器的实现方法
2021/03/31 Servers
SpringCloud的JPA连接PostgreSql的教程
2021/06/26 Java/Android
django 认证类配置实现
2021/11/11 Python