脚本之家

电脑版
提示:原网页已由神马搜索转码, 内容由www.jb51.net提供.
您的位置:首页网络编程JavaScriptjavascript类库vue.js→ vue3+vite+移动端webview打包页面加载空白

vue3+vite+移动端webview打包后页面加载空白问题解决办法

  更新时间:2024年06月27日 08:26:25  作者:大白592 
这篇文章主要给大家介绍了关于vue3+vite+移动端webview打包后页面加载空白问题的解决办法,文中通过代码介绍的非常详细,对大家的学习或者工作具有一定的参考借鉴价值,需要的朋友可以参考下

在vue3编写时,遇到这样的一个问题:

移动端混合开发中,本地浏览器正常运行,但是vite打包后,手机版本相对低的时候,会出现h5页面空白情况,经过多方面百度,找到了相对应的添加配置才正常,如下:

在项目中index.html中添加:

   < script>
    // 兼容es6 不加这行手机版本太低打包后好多方法无法生效
    this.globalThis || (this.globalThis = this)
  < /script>

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" href="/favicon.ico" rel="external nofollow" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, viewport-fit=cover" />
<!-- 开启顶部安全区适配 -->
<van-nav-bar safe-area-inset-top></van-nav-bar>
<!-- 开启底部安全区适配 -->
<van-number-keyboard safe-area-inset-bottom ></van-number-keyboard>
<!-- <title></title> -->
<script>
// 兼容es6 不加这行手机版本太低打包后好多方法无法生效
this.globalThis || (this.globalThis = this)
</script>
</head>
<body>
<div id="app"></div>
<script type="module" src="/src/main.ts"></script>
</body>
</html>

原因:

尝试定义一个全局对象 globalThis,这是ES2020中引入的一个新特性,它提供了一个标准的方式来访问全局 this 值,无论在哪个上下文中执行代码。在浏览器环境中,它通常等同于 window 对象;在Node.js环境中,它等同于 global 对象;在Web Workers中,它则是那个worker的全局对象。

这段代码是为了确保在低版本的手机浏览器中,即使原生不支持 globalThis,也能通过这段代码来模拟它。

另外,考虑到代码健壮性和可读性,通常不建议直接在全局作用域中定义变量或修改全局对象,除非绝对必要。不过,由于 globalThis 是一个标准规范,所以这里是一个例外。

下面是修改后的代码示例,它更有可能按预期工作:

<script>  
// 兼容不支持原生globalThis的环境
(function() {
if (typeof globalThis === 'undefined') {
Object.defineProperty(this, 'globalThis', {
value: this,
writable: false,
enumerable: false,
configurable: false
});
}
})();
</script>

<!-- 之后的代码可以使用globalThis了 -->

在这个修改后的版本中,我使用了一个立即执行的函数表达式(IIFE)来确保代码在全局作用域中执行,并且使用了 Object.defineProperty 来更安全地定义 globalThis 属性。这样,即使在不支持 globalThis 的环境中,代码也能正常工作,并且不会意外地覆盖任何已存在的全局变量。

在项目中vite.config.ts中添加:

legacyPlugin({
targets:['defaults', 'not IE 11']
// targets:['chrome 52'], // 需要兼容的目标列表,可以设置多个
// additionalLegacyPolyfills:['regenerator-runtime/runtime'] // 面向IE11时需要此插件
}),
esbuild({
//替换成你想要的谷歌内核版本
target: ['chrome52','chrome64'],
loaders: {
'.vue': 'js',
'.ts': 'js'
}
}),
import { defineConfig ,loadEnv  } from 'vite'
import vue from '@vitejs/plugin-vue'
import esbuild from 'rollup-plugin-esbuild'
import legacyPlugin from '@vitejs/plugin-legacy'
import Components from 'unplugin-vue-components/vite';
import { VantResolver } from 'unplugin-vue-components/resolvers';
import { resolve } from 'path'
const port = 6688 //端口
export default defineConfig(({command, mode }) => {
const env = loadEnv(mode, process.cwd())
console.log('当前环境变量:',env,'当前运行模式:',mode)
return {
base:'/worker/mb/v1/',
plugins: [
vue(),
legacyPlugin({
targets:['defaults', 'not IE 11']
// targets:['chrome 52'], // 需要兼容的目标列表,可以设置多个
// additionalLegacyPolyfills:['regenerator-runtime/runtime'] // 面向IE11时需要此插件
}),
esbuild({
//替换成你想要的谷歌内核版本
target: ['chrome52','chrome64'],
loaders: {
'.vue': 'js',
'.ts': 'js'
}
}),
Components({
resolvers: [VantResolver()],
}),
],
resolve:{
alias:{
'@': resolve(__dirname, 'src'),
}
},
css: {
preprocessorOptions: {
less: {
charset:false,
additionalData: '@import "./src/style/global.less";'
}
}
},
server:{
port:port,
host:env.VITE_APP_BASE_host,
proxy:{
[env.VITE_APP_BASE_API]:{
target: env.VITE_APP_BASE_url,
changeOrigin: true,//是否跨域
ws: true,
rewrite: (path) => {
const regExp = new RegExp(`^\\/${env.VITE_APP_BASE_API}`);
return path.replace(regExp, '');
}
}
}
}
}
})

总结 

到此这篇关于vue3+vite+移动端webview打包后页面加载空白问题解决办法的文章就介绍到这了,更多相关vue3+vite+移动端webview打包页面加载空白内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

    • 这篇文章主要介绍了解决找不到模块“xxx.vue”或其相应的类型声明问题,具有很好的参考价值,希望对大家有所帮助。
      2022-10-10
    • 这篇文章主要为大家分享了一个非常实用的vue导航钩子,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
      2017-03-03
    • 这篇文章主要介绍了vue.js计算属性computed用法,结合实例形式分析了vue.js使用computed方式进行属性计算的相关操作技巧,需要的朋友可以参考下
      2018-07-07
    • 本文介绍Vue在import时省略后缀以及import文件夹的方法,结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
      2022-08-08
    • 这篇文章主要介绍了使用vue-i18n 入口文件配置控制台报警问题解决,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
      2023-06-06
    • 这篇文章主要介绍了关于Vue v-on指令的一些使用场景,比如监听事件、传入event参数、事件修饰符的一些场景,下面就来看看具体使用的方法吧,需要的朋友可以参考一下
      2021-10-10
    • 这篇文章主要介绍了vue2 拖动排序 vuedraggable组件的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
      2019-08-08
    • 这篇文章主要为大家介绍了Vue执行流程及渲染解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
      2023-06-06
    • 这篇文章主要为大家详细介绍了vue+echarts实现数据实时更新,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
      2022-04-04
    • 这篇文章主要介绍了element中el-select的使用及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
      2023-01-01

    最新评论