You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Expo项目中react-native-webview调试模式正常但发布/预览模式加载失败(错误码-1,Domain undefined)

Expo项目中react-native-webview调试模式正常但发布/预览模式加载失败(错误码-1,Domain undefined)

我之前在Expo项目里也碰到过几乎一模一样的问题,结合你给出的配置和报错信息,给你整理几个实际有效的排查方向和解决办法:

1. 优先排查新架构(New Architecture)的兼容性问题

你在app.json里开启了newArchEnabled: true,但react-native-webview 13.x版本对新架构的支持其实还存在不少兼容性问题,尤其是在Expo的打包环境下。很多开发者反馈过旧版webview在新架构的发布/预览包中会出现加载失败、错误码-1的情况。

解决办法:

  • 先临时把newArchEnabled改成false,然后执行npx expo start --clear清除缓存,重新构建预览/发布包测试。如果webview恢复正常,那基本可以确定是新架构的兼容性问题。
  • 你可以选择暂时关闭新架构继续开发,或者等待react-native-webview升级到14.x及以上版本(对新架构支持更稳定)后再尝试开启。

2. 本地HTML文件的打包路径问题

调试模式下Expo会直接读取本地文件的原始路径,但发布模式下所有资源会被打包成Expo的asset,require("../webview/SpeechToText.html")的引用方式可能无法正确解析到打包后的路径。

解决办法:

  • 把你的HTML文件移动到项目的assets目录下,然后用Expo的Asset模块来获取正确的本地路径,示例代码:
    import { Asset } from 'expo-asset';
    
    const htmlAsset = Asset.fromModule(require('../assets/SpeechToText.html'));
    await htmlAsset.downloadAsync();
    
    // 然后在WebView的source里使用
    source={{ uri: htmlAsset.localUri }}
    
  • 或者把HTML内容直接转成base64字符串,作为source={{ html: 你的base64内容 }}传入WebView,彻底绕开本地文件打包的问题。

3. 升级react-native-webview到稳定版本

你当前使用的13.13.5版本比较老旧,这个版本在Expo发布模式下存在不少已知的加载bug。升级到最新的稳定版(比如14.8.1或更高)能解决大部分这类兼容性问题。

操作步骤:

  • 执行npm install react-native-webview@latest或者yarn add react-native-webview@latest升级依赖
  • 清除Expo缓存:npx expo start --clear
  • 重新构建测试包

4. 构建缓存残留问题

Expo的本地和远程构建缓存有时候会残留旧的配置或资源,导致发布模式下出现和调试模式不一致的问题。

解决办法:

  • 本地开发时:每次修改架构或依赖后,都执行npx expo start --clear清除本地缓存
  • 远程构建时:在Expo Dashboard的构建任务页面,选择「Clear build cache」后再重新发起构建

5. WebView配置的细节调整

你的WebView设置了width:0,height:0,opacity:0,虽然是作为后台服务使用,但发布模式下系统可能会因为WebView尺寸为0而直接跳过渲染或资源加载。可以尝试微调配置:

  • 把尺寸改成width:1,height:1,opacity:0.01,保持视觉上不可见但让系统认为它是需要渲染的组件
  • 把originWhitelist: ['*']改成明确的允许列表,比如本地开发/打包的origin是exp://*,远程URL的话加上对应的域名(比如https://your-domain.com/*),避免模糊匹配在发布模式下被拦截

额外补充:远程URL的网络权限检查

如果远程URL也无法加载,还要确认:

  • Android端:在app.json的android配置里添加"usesCleartextTraffic": true(如果你的远程URL是http协议)
  • iOS端:如果是http URL,需要在app.json的ios配置里添加ATS例外:
    "ios": {
      "infoPlist": {
        "NSAppTransportSecurity": {
          "NSAllowsArbitraryLoads": true
        }
      }
    }
    

不过因为你本地HTML也加载失败,这个可能不是主要原因,但可以作为补充排查项。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.07 07:18:04