Taro3的H5项目在Android、IOS 中因为兼容性问题导致的白屏问题

使用场景:Taro 的H5项目在Android 11 以上版本可以正常展示,但是在Android 10以及一下版本会出现白屏无法加载。

问题定位:由于我们是混合开发,在APP内部嵌入H5的时候使用的浏览器版本相对手机的默认浏览器来说,兼容性会更低。在最后在测试之后发现当浏览器内核版本小于77之后,才会出现白屏。那么进一步排查,发现是在构建打包的时候ES不兼容到之后,最后确认当浏览器版本低于77之后,不兼容ES6+,所有我们在构建的时候需要考虑低版本兼容。

解决方案:

第一步:添加 babel

TypeScript 复制代码
yarn add @babel/preset-env --dev

第二步:在babel配置中增加低版本限制

TypeScript 复制代码
module.exports = {
   presets: [
    ['taro', {
      framework: 'preact',
      ts: true,
      hot: false,
      targets: {
        ios: '9',
        android: '5'
      }
    }]
  ],
 ...
}

第三步:在config/index.ts文件中增加ES转换

TypeScript 复制代码
h5: {

  ...
  webpackChain(chain) {
     chain.resolve.plugin('tsconfig-paths').use(TsconfigPathsPlugin);
        chain.merge({
          module: {
           rule: {
              injectBaseComponentLoader: {
                test: /\.tsx$/,
                use: [
                  {
                    loader: 'taro-inject-component-loader',
                    options: {
                      importPath: '@/custom-tab-bar',
                      logError: true,
                      isPage(filePath) {
                        // 兼容 windows
                        const formatFilePath = filePath.replace(/\\/g, '/')
                        const reg = /pages\/(cart|plantGrass|user|index|classify)\/index\.[tj]sx$/
                        return reg.test(formatFilePath)
                      }
                    },
                  },
                ],
              },
              myloader: {
                test: /\.js$/, 
                use: [{
                  loader: 'babel-loader',
                  options: {}
                }]
              },
              es5Loader: {
                include: [
                  path.resolve(__dirname, "../node_modules"),
                ],
                test: /\.*[tj]s$/,
                use: [
                  {
                    loader: "babel-loader",
                  }
                ]
              }
            }
         ...
      });
  }
}

**结果测试:**好啦,我门把以上三个步骤走完之后就可以验证结果了。之后我们验证之后发件浏览器版本低于77之后是可以兼容了。因为我们只有Andriod 手机,所以使用了Andriod 10 、Andriod 9、Andriod 8 都是可以兼容了。好啦,到这里大功告成!!!

相关推荐
松仔log12 小时前
Java中级——组合和继承
android·java·开发语言
我命由我1234515 小时前
Jetpack Compose - MaterialExpressiveTheme 与 MaterialTheme、ColorScheme
android·java·开发语言·java-ee·kotlin·android jetpack·android runtime
lilian23316 小时前
Harmony os 技术实战|拼豆制图06:收藏 ID、生成记录与重启恢复怎么不打架
android·java·数据库·harmonyos
2601_9557596217 小时前
ClaudeAPI成本中心与业务标签设计指南
android·java·数据库
余衫马17 小时前
2026最新版!Android Studio 极速安装与配置指南
android·ide·android studio
AFinalStone17 小时前
Android 7系统异常问题排查(五)Framework层(下)—System Server崩溃
android·tombstone·系统异常
AFinalStone17 小时前
Android 7系统异常问题排查(八)系统追踪—Trace机制与性能诊断
android·系统异常
long31619 小时前
Codex 团队开发入门到精通学习资料
ai·团队开发·个人开发·ai编程
PM老周20 小时前
企业智能研发研发管理平台怎么选?权限、部署与MCP能力解析
ai·项目管理·团队开发·智能研发管理
极客猴子21 小时前
Android录音转写频繁卡顿?多款APP长时间会议场景稳定性实测
android·人工智能·智能手机·飞书