详解一次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 相关文章推荐
学习YUI.Ext 第四天--对话框Dialog的使用
Mar 10 Javascript
一个js的tab切换效果代码[代码分离]
Apr 11 Javascript
javascript中的document.open()方法使用介绍
Oct 09 Javascript
解决jQuery动态获取手机屏幕高和宽的问题
May 07 Javascript
深入理解JavaScript系列(34):设计模式之命令模式详解
Mar 03 Javascript
javascript轻量级库createjs使用Easel实现拖拽效果
Feb 19 Javascript
JS动态修改网页body的背景色实例代码
Oct 07 Javascript
vue2.0使用swiper组件实现轮播的示例代码
Mar 03 Javascript
解决layer.msg 不居中 ifram中的问题
Sep 05 Javascript
原生js实现二级联动菜单
Nov 27 Javascript
JavaScript使用canvas绘制随机验证码
Feb 17 Javascript
Angular5整合富文本编辑器TinyMCE的方法(汉化+上传)
May 26 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
web站点获取用户IP的安全方法 HTTP_X_FORWARDED_FOR检验
2013/06/01 PHP
PHP和JavaScrip分别获取关联数组的键值示例代码
2013/09/16 PHP
PHP实现根据数组的值进行分组的方法
2017/04/20 PHP
浅谈laravel框架sql中groupBy之后排序的问题
2019/10/17 PHP
PHP解决高并发的优化方案实例
2020/12/10 PHP
Js(JavaScript)中,弹出是或否的选择框示例(confirm用法的实例分析)
2013/07/09 Javascript
基于jquery实现表格内容筛选功能实例解析
2016/05/09 Javascript
html+js+highcharts绘制圆饼图表的简单实例
2016/08/04 Javascript
微信小程序实现图片预加载组件
2017/01/18 Javascript
Bootstrap table 定制提示语的加载过程
2017/02/20 Javascript
js获取指定时间的前几秒
2017/04/05 Javascript
Node.js使用orm2进行update操作时关联字段无法修改的解决方法
2017/06/13 Javascript
Vue.js实现分页查询功能
2020/11/15 Javascript
p5.js入门教程之平滑过渡(Easing)
2018/03/16 Javascript
记录一次完整的react hooks实践
2019/03/11 Javascript
Vue仿微信app页面跳转动画效果
2019/08/21 Javascript
40行代码把Vue3的响应式集成进React做状态管理
2020/05/20 Javascript
[02:21]DOTA2英雄基础教程 蝙蝠骑士
2013/12/16 DOTA
[02:43]2014DOTA2国际邀请赛 官方Alliance战队纪录片
2014/07/14 DOTA
[01:01:01]完美世界DOTA2联赛循环赛 GXR vs FTD BO2第一场 10.29
2020/10/29 DOTA
python解析模块(ConfigParser)使用方法
2013/12/10 Python
Python用UUID库生成唯一ID的方法示例
2016/12/15 Python
python中int与str互转方法
2018/07/02 Python
python opencv实现运动检测
2018/07/10 Python
详解爬虫被封的问题
2019/04/23 Python
python3.4+pycharm 环境安装及使用方法
2019/06/13 Python
如何使用python爬虫爬取要登陆的网站
2019/07/12 Python
Pycharm Available Package无法显示/安装包的问题Error Loading Package List解决
2020/09/18 Python
python实现马丁策略回测3000只股票的实例代码
2021/01/22 Python
加拿大女包品牌:Matt & Nat
2017/05/12 全球购物
秘书英文求职信范文
2014/01/31 职场文书
计划生育个人总结
2015/03/02 职场文书
80后创业总结的9条职场用人思想,记得收藏
2019/08/13 职场文书
用python删除文件夹中的重复图片(图片去重)
2021/05/12 Python
python小型的音频操作库mp3Play
2022/04/24 Python
SQL bool盲注和时间盲注详解
2022/07/23 SQL Server