详解一次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的执行速度
Jan 23 Javascript
js里的prototype使用示例
Nov 19 Javascript
巧用js提交表单轻松解决一个页面有多个提交按钮
Nov 17 Javascript
jQuery瀑布流插件Wookmark使用实例
Apr 02 Javascript
jquery ajax应用中iframe自适应高度问题解决方法
Apr 12 Javascript
IE浏览器IFrame对象内存不释放问题解决方法
Aug 22 Javascript
Jquery技巧(必须掌握)
Mar 16 Javascript
JavaScript直播评论发弹幕切图功能点集合效果代码
Jun 26 Javascript
JavaScript数值千分位格式化的两种简单实现方法
Aug 01 Javascript
jQuery progressbar通过Ajax请求实现后台进度实时功能
Oct 11 Javascript
vue+axios新手实践实现登陆的示例代码
Jun 06 Javascript
微信小程序开发打开另一个小程序的实现方法
May 17 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连接mysql数据库代码
2009/03/10 PHP
PHP字符编码问题之GB2312 VS UTF-8解决方法
2011/06/23 PHP
关于PHP实现异步操作的研究
2013/02/03 PHP
zend Framework中的Layout(模块化得布局)详解
2013/06/28 PHP
ThinkPHP实现将本地文件打包成zip下载
2014/06/26 PHP
php header函数的常用http头设置
2015/06/25 PHP
PHPExcel笔记, mpdf导出
2016/05/03 PHP
javascript中callee与caller的用法和应用场景
2010/12/08 Javascript
原生Js实现按的数据源均分时间点幻灯片效果(已封装)
2010/12/28 Javascript
用函数模板,写一个简单高效的 JSON 查询器的方法介绍
2013/04/17 Javascript
鼠标划过实现延迟加载并隐藏层的js代码
2013/10/11 Javascript
jquery对ajax的支持介绍
2013/12/10 Javascript
js微信分享API
2020/10/11 Javascript
AngularJS中如何使用echart插件示例详解
2016/10/26 Javascript
Bootstrap3 模态框使用实例
2017/02/22 Javascript
node通过express搭建自己的服务器
2017/09/30 Javascript
JavaScript执行环境及作用域链实例分析
2018/08/01 Javascript
JS监听组合按键思路及实现过程
2020/04/17 Javascript
Python安装Imaging报错:The _imaging C module is not installed问题解决方法
2014/08/22 Python
Python生成不重复随机值的方法
2015/05/11 Python
21行Python代码实现拼写检查器
2016/01/25 Python
python对DICOM图像的读取方法详解
2017/07/17 Python
Django 使用Ajax进行前后台交互的示例讲解
2018/05/28 Python
python实现QQ空间自动点赞功能
2019/04/09 Python
用python打印菱形的实操方法和代码
2019/06/25 Python
浅析Python 引号、注释、字符串
2019/07/25 Python
Django中自定义admin Xadmin的实现代码
2019/08/09 Python
Python通过Tesseract库实现文字识别
2020/03/05 Python
用python按照图像灰度值统计并筛选图片的操作(PIL,shutil,os)
2020/06/04 Python
Python利用imshow制作自定义渐变填充柱状图(colorbar)
2020/12/10 Python
使用canvas实现黑客帝国数字雨效果
2020/01/02 HTML / CSS
入学生会自荐书范文
2014/02/05 职场文书
护士自荐信范文
2015/03/25 职场文书
少先队工作总结2015
2015/05/13 职场文书
2015年酒店服务员工作总结
2015/05/18 职场文书
撤诉状格式范本
2015/05/19 职场文书