APP内嵌h5页面在android低版本出现白屏问题(vue项目)

2023-11-14

前段时间在处理一个vue项目时, 在vivo和华为的android5.0系统出现白屏,没有任何报错信息, 之后特地买了两台真机进行测试, 经过分段调试 , 一步步排查, 最后发现是这段代码出错:
在这里插入图片描述
到底什么问题? 对比一下这段代码
在这里插入图片描述
很明显, 参数默认值的问题! 也就是ES6语法不兼容!
但实际上不完全是, 在这个项目中,有不少类似箭头函数这种语法, 通通都是支持的.实际上项目中是有babel进行转码.

那到底是怎么回事呢?

我们都知道,babel是一个转译器,可以把同种语言的高版本规则翻译成低版本规则, 一般在项目根目录下会有一个 .babelrc 文件, 用于默认解析 ES2015(es6) 中的特殊语法, 像 let,const, => 等等;

而babel默认只转换新的JavaScript句法(syntax),而不转换新的API,比如Iterator、Generator、Set、Maps、Proxy、Reflect、Symbol、Promise等全局对象,以及一些定义在全局对象上的方法(比如Object.assign)都不会转码。
所以需要使用 babel-polyfill,为当前环境提供一个垫片,需要在Webpack中配置babel-loader

具体操作如下:
1. 如果没有安装babel转码规则,需要先安装,

ES2015转码规则
npm install --save-dev babel-preset-es2015

ES6+不同阶段语法提案的转码规则(共有4个阶段),选装一个就可以了
$ npm install --save-dev babel-preset-stage-0
$ npm install --save-dev babel-preset-stage-1
$npm install --save-dev babel-preset-stage-2

配置babel转码规则, .babelrc文件如下:

{
  "presets": [
    ["env", {
      "modules": false,
      "targets": {
        "browsers": ["> 1%", "last 2 versions", "not ie <= 8"]
      }
    }],
    "stage-2"
  ],
  "plugins": ["transform-vue-jsx", "transform-runtime"],
  "env": {
    "test": {
      "presets": ["env", "stage-2"],
      "plugins": ["transform-vue-jsx", "transform-es2015-modules-commonjs", "dynamic-import-node"]
    }
  }
}

在这里插入图片描述

2.安装babel-polyfill
npm install --save-dev babel-polyfill

在入口文件main.js中引入

import babel-polyfill	

在build文件的webpack.base.conf.js文件下修改入口:
在这里插入图片描述

3.配置"babel-loader"
npm install -D babel-loader@7 babel-core babel-preset-env webpack

在package.json文件中的devDependencies{}同级中, 添加代码:

  "babel": {
    "presets": [
      "env"
    ],
    "plugins": []
  }

在这里插入图片描述
在webpack的webpack.base.config.js文件中, 添加如下代码:

{
   test: /\.js$/,
   loader: 'babel-loader',
   include: [resolve('src'), resolve('test'), resolve('node_modules/webpack-dev-server/client')]
 },

在这里插入图片描述
到这就可以了, 完美解决.

扩展:
1. npm run build打包页面空白

原因: 路径错误
解决: 文件:把assetsPublicPath: '/'改为assetsPublicPath: ‘./’

build: {
assetsPublicPath:./,
}
2.Vue在IE、低版本Android显示空白问题

原因: IE对promise的支持不好
解决: 安装:babel-polyfill和es6-promise:

	npm install babel-polyfill
	npm install es6-promise

然后在main.js文件中引用:

import 'babel-polyfill'
import Vue from 'vue'
import Es6Promise from 'es6-promise'
Es6Promise.polyfill()

最后 build/webpack.base.conf.js 文件中配置如下:

module.exports = {
entry: {
app: [“babel-polyfill”,./src/main.js”]
} };
3. IE不支持 Promise 解决办法
引入 <script src = "https://cdn.polyfill.io/v2/polyfill.min.js"></script><script type="text/javascript" src ="https://cdn.polyfill.io/v2/polyfill.min.js?features=es6"></script>
4.解决方法是在项目根目录下新建一个文件vue.config.js,在里面添加如下语句:
module.exports = { chainWebpack: config => {
config.rule(‘js’).include.add(/node_modules/(dom7|swiper)/.*/) } }
5.升级vue2+部分手机访问出现页面空白

npm run dev后可能出现无法加载到路由模板的信息。

解决:config/index.js文件:

把 devtool: ‘#eval-source-map’ 改为devtool:‘inline-source-map’
6.升级vue2+IP访问页面空白

默认只能通过localhost或者127.0.0.1才能访问,如果使用本机的Ip地址会出现无法访问到的情况。

解决:config/index.js文件:

把config/index.js中“host” 配置为“0.0.0.0”就可以解决,或者设置为你电脑的IP地址也行.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

APP内嵌h5页面在android低版本出现白屏问题(vue项目) 的相关文章

  • VUE+vue-print-nb,vue打印我踩过的坑

    这几天写了一个需求 要求打印条形码 先来张要打印出来的效果图吧 效果图大概长这样子 图是我随便找的 二维码扫出来是啥我也不知道 哈哈 写这个需求的时候踩了太多的坑了 在此记录下辛酸史 vue print nb基本用法 这个插件用法很简单 安
  • => js 中箭头函数使用总结

    箭头函数感性认识 箭头函数 是在es6 中添加的一种规范 x gt x x 相当于 function x return x x 箭头函数相当于 匿名函数 简化了函数的定义 语言的发展都是倾向于简洁 对人类友好的 减轻工作量的 就相当于我最钟
  • bug: TypeError: Invalid attempt to spread non-iterable instance

    报错信息 分析 此类报错多为扩展运算符报错 问题代码 解决方式
  • js获取数组中最大最小值及对应索引值(下标)

    1 使用原生Js实现该功能 主要是通过循环实现 getMaxMin data key gt if data return false let maxIndex 0 let minIndex 0 let maxNum data 0 key 0
  • Map 转化为数组

    含义 Map 数据结构类似于对象 也是键值对的集合 但是键的范围不限于字符串 各种类型的值 包括对象 都可以当做键 Map 结构提供了 值 值 的对应 是更完善的 Hash 结构实现 Map 可以作为构造函数 新建 Map new Map
  • Vue刻度尺组件

    1 安装刻度尺组件 npm install cs ruler 2 在main js中全局引入组件 import CsRuler from cs ruler 刻度尺组件 Vue use CsRuler 3 组件使用
  • ES6入门

    一 let和const命令 1 let命令 类似于var 但是只在let所在的代码块有效 不存在变量提升 即一定要先声明后使用 暂时性死区 待理解 不允许重复声明 2 块级作用域 内层不影响外层 3 const命令 const声明一个常量
  • 【ES6】Set 和 Map 数据结构

    文章目录 前言 一 Set 1 用法详解 1 1 声明方式 1 2 遍历的四种方式 2 应用场景 2 1 数组去重 2 2 合并去重 2 3交集 2 4 差集 3 WeakSet 二 Map 1 用法详解 1 1 声明方式 1 2 遍历的四
  • ES6关于函数详解

    设置默认值的方式 ES6 之前 不能直接为函数的参数指定默认值 只能采用变通的方法 ES6 允许为函数的参数设置默认值 即直接写在参数定义的后面 function log x y World console log x y log Hell
  • Element ui中menu组件(el-menu/el-menu-item/el-submenu/template) 层级结构和用法

    此篇文章写下的时间是2020年 所以如今Element UI都更新了不知道多少版了 肯定会有些许变化 请勿完全照搬照抄 虽然可能这部分代码没什么大的变动 但还是要以官方文档为准 此文仅仅是借鉴 理解具体思路 然后再按照官方的例子来应用到自己
  • vue-cli3中解决在ie中报语法错误问题导致白屏

    1 一般报语法错误时因为部分浏览器不支持ES6 so 我们就应该下载 npm install babel polyfil 判断此插件是否成功 查看项目中是否有babel config js这个文件 2 在vue config js里配置引入
  • 前端常用js插件

    浏览目录 包管理器 加载器 打包工具 测试框架 框架 断言 覆盖率 运行器 QA 工具 MVC 框架和库 基于 Node 的 CMS 框架 模板引擎 Flux 数据可视化 时间轴 编辑器 文件 函数式编程 响应式编程 数据结构 日期 字符串
  • Promise 捕获错误

    你好 我是南一 这是我在准备面试八股文的笔记 如果有发现错误或者可完善的地方 还请指正 万分感谢 前言 今天做项目时 遇到Promise抛出错误捕获不到的情况 然后我就去找了 阮一峰ES6入门重新学了一遍 又加深了对Promise的理解 分
  • cesium很全的入门教程-翻译官网和加入自己理解

    Cesium WorkShop cesium快速入门教程 快速入门教程基本涵盖了大多数的CesiumJS API概念 主要用于Cesium基本入门 对Cesium有全面基本的了解和使用 一 概述 本教程会一步一步教会你做一个项目 主要介绍如
  • 深入理解ES6箭头函数中的this

    简要介绍 箭头函数中的this 指向与一般function定义的函数不同 比较容易绕晕 箭头函数this的定义 箭头函数中的this是在定义函数的时候绑定 而不是在执行函数的时候绑定 1 何为定义时绑定 我们来看下面这个例子 1 var x
  • React解密:React Hooks函数之useCallback和useMemo

    之所以将useCallback和useMemo放到一起 从某种意义上说 他们都是性能优化的始作俑者 他们也有很多的共性 我们先来回顾一下class组件性能优化的点 调用 setState 就会触发组件的重新渲染 无论前后 state 是否相
  • 【JS 构造

    个人格言 时间是亳不留情的 它真使人在自己制造的镜子里照见自己的真相 Git专栏 Git篇 JavaScript专栏 js实用技巧篇 该专栏持续更新中 目的是给大家分享一些常用实用技巧 同时巩固自己的基础 共同进步 欢迎前来交流 你的一键三
  • 137-----JS基础-----类的操作

    一 代码 不算难 如果后续操作到类的话 可以直接使用下面封装好的接口到自己的tool中
  • ES6 面试题 | 13.精选 ES6 面试题

    前端开发工程师 主业 技术博主 副业 已过CET6 阿珊和她的猫 CSDN个人主页 牛客高级专题作者 在牛客打造高质量专栏 前端面试必备 蓝桥云课签约作者 已在蓝桥云课上架的前后端实战课程 Vue js 和 Egg js 开发企业级健康管理
  • 【ES6】解构语句中的冒号(:)

    在解构赋值语法中 冒号 的作用是为提取的字段指定一个新的变量名 让我们以示例 const billCode code version route query 来说明 billCode code version 表示从 route query

随机推荐

  • java的打包后jar包里面的class文件都能被反编译成为源码吗?

    d gui这个工具可以进行反编译的操作 不过反编译的质量随着混淆的程度而定 特别复杂的代码 如加密算法 反编译一般都有问题 可以建议用 javap c p 来看字节码 然后参考jvm指令 总结 一般编译的文件 都可以反编译为源码 但如果是经
  • Boost多线程和Asio

    BOOST ASIO 学习专贴 https www cnblogs com zhangdongsheng p 6984634 html Boost线程库学习笔记 https www cnblogs com younes archive 20
  • 「云+未来」上海峰会,报名开启

    欢迎大家前往腾讯云技术社区 获取更多腾讯海量技术实践干货哦 开放技术能力 探索产业变革 分享腾讯云助力各行业的转型经验 腾讯 云 未来 上海峰会将于9月21日在上海中星铂尔曼大酒店盛大举行 本次峰会以 连接 智能 未来 为主题 邀请政企精英
  • 入门学python的朋友注意了,这17个注意事项要记住哦

    前言 Python这门语言虽然不会很难 但是毕竟是一门编程语言 想要学好学会python 还是要需要注意这17个注意事项 这是我自己在学习python的过程中总结出来的 希望能让你在学习过程中少走弯路 1 在选择python版本的时候 应该
  • tkinter和mysql做登录注册_怎么用flask+mysql来实现一个简单的用户注册和登陆效果的页面呢?请不要用任何ORM...

    一个简单的用户注册和登录的页面 就两个部分 涉及到数据库 存储用户数据 注册 读出用户数据 登录验证 搞清楚如何用python连接和操作数据库即可 还有了解sql数据库语句 sqlite和mysql差不多的 看几眼多试几下就了解了 网站程序
  • 使用micropython(ESP8266、ESP32)驱动SES 2.66寸墨水屏显示中文

    由于需要做一些低功耗的东西 所以最近在尝试玩墨水屏 出于成本考虑 没钱的另一种委婉说法 从咸鱼淘到2块便宜的二手SES 2 66寸三色墨水屏 并使用micropython将其驱动起来 并用字库的方法显示中文 一 屏幕的驱动 1 硬件连线 S
  • c++ string类赋值方法

    1 若s2没有赋初值的正确赋值方法 若s2没有赋初值 那我们要怎样才能给string类的字符串赋值呢 看下面这段代码 只需要将赋值语句改成这样 s2 s2 s1 i 加法即向其赋值 include
  • Android OpenCV实现人脸检测(一)完成人脸检测功能

    环境搭建 Android Studio 集成OpenCV 本节完整的代码链接 Android OpenCV Demo 预览黑屏 下一节会实现预览的功能 1 创建 assets 文件夹 2 在 OpenCV android sdk sdk e
  • 解决问题:安装Visio版本冲突(MSI与即点即用)

    安装Visio参考 https www jianshu com p 43c59f7c394d 问题一 Office 2016 Click to Run 冲突 32位与64位冲突 画外音 我迟早要把那个家庭版给卸载了吧 功能是真的阉割 解决
  • js work 多线程

    js work 多线程 主js function goBack window frames 0 history back 1 console log 准备开启第二线程 var worker new Worker js cpc2 js wor
  • 初识顶点/片元着色器

    5 2 一个最简单的顶点 片元着色器 5 2 1 顶点 片元着色器的基本结构 一个 Unity Shader 的基本结构 它包含了 Shader Properties SubShader Fallback 等语义块 顶点 片元着色器的结构与
  • 理解互斥量和信号量 作者: JuKevin

    理解互斥量和信号量 作者 JuKevin 互斥量 Mutex 互斥量表现互斥现象的数据结构 也被当作二元信号灯 一个互斥基本上是一个多任务敏感的二元信号 它能用作同步多任务的行为 它常用作保护从中断来的临界段代码并且在共享同步使用的资源 M
  • python key=lambda 元素: 元素[字段索引]用法

    key lambda 元素 元素 字段索引 x x 字母可以随意修改 比如改成y y 也行 排序方式按照中括号 里面的维度进行排序 0 按照第一维排序 1 按照第二维排序 2 按照第三维排序 依此类推 如二维 class Solution
  • Python3,实用技巧之:三类(7种)拼接字符串方式

    三类拼接字符串方式 1 引言 2 格式化类 2 1 来自C的 方式 2 2 format 拼接方式 2 3 面向对象模板拼接 3 拼接类 3 1 常用的 方式 3 2 类似元组的方式 3 3 join方法 4 插值类 4 1 f strin
  • 使用MySQL APT库在Linux上安装MySQL

    添加APT仓库 访问https dev mysql com downloads repo apt 选择下载适合自己平台的deb包 执行下面的命令 安装下载的软件包 sudo dpkg i PATH version specific pack
  • 审视HR SaaS:谁在成为中国的 “IBM+ Workday”?

    在国内的商业环境下 未来 梳理流程等咨询管理能力 或将成为HR SaaS厂商的重要竞争力 国内HR SaaS在 IBM Workday 的模式下 或将迎来新一轮增长 作者 斗斗 编辑 皮爷 出品 产业家 2023年 HR SaaS 正式宣布
  • 功率MOS管保护电路设计

    功率MOS管自身拥有众多优点 但是MOS管具有较脆弱的承受短时过载能力 特别是在高频的应用场合 所以在应用功率MOS管对必须为其设计合理的保护电路来提高器件的可靠性 功率MOS管保护电路主要有以下几个方面 1 防止栅极 di dt过高 由于
  • Git是什么?可以用来做什么?如何使用?

    看完本文之后你能收获什么 1 知道git是什么 可以用来干什么 2 会使用git进行版本控制 3 知道如何继续深度学习git git用来干什么 不知道你工作的时候有没有遇到这样的情况 比如说 做BIM建模 你手中有一份模型初稿 但现在需要在
  • java设计模式(二十二)策略模式

    目录 定义 模式结构 角色职责 代码举例 适用场景 优缺点 定义 策略模式 Strategy Pattern 属于对象的行为模式 其用意是针对一组算法 将每一个算法封装到具有共同接口的独立的类中 从而使得它们可以相互替换 策略模式使得算法可
  • APP内嵌h5页面在android低版本出现白屏问题(vue项目)

    前段时间在处理一个vue项目时 在vivo和华为的android5 0系统出现白屏 没有任何报错信息 之后特地买了两台真机进行测试 经过分段调试 一步步排查 最后发现是这段代码出错 到底什么问题 对比一下这段代码 很明显 参数默认值的问题