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

React Native WebView v11在Android端选择/上传文件时崩溃问题求助

这个是react-native-webview 11.x版本的已知原生层缺陷:安卓端文件选择逻辑中,接收系统相册/文件选择器返回结果时,持有的回调Promise实例未做非空校验,当Activity被系统临时回收重建后Promise实例丢失,调用resolve方法就会触发空指针崩溃。

以下是可行的修复方案:

方案1:升级react-native-webview版本

官方在v11.26.1及之后的11.x小版本中已经修复了该空指针问题,无需修改业务代码,直接升级依赖即可:

npm install react-native-webview@11.26.1
# 或使用yarn
yarn add react-native-webview@11.26.1

方案2:无法升级版本时的原生层修复

在安卓项目的MainActivity.java中重写onActivityResult方法,捕获该异常避免崩溃:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
  try {
    super.onActivityResult(requestCode, resultCode, data);
  } catch (NullPointerException e) {
    // 捕获react-native-webview文件选择回调的空指针异常,避免崩溃
    if (e.getMessage() != null && e.getMessage().contains("com.facebook.react.bridge.Promise.resolve")) {
      // 可自行补充业务侧的错误提示逻辑
    } else {
      throw e;
    }
  }
}

方案3:JS层临时规避

给现有WebView组件添加安卓端文件访问相关属性,部分场景下可降低崩溃概率:

<WebView
       style={styles.webView}
       containerStyle={resolvedWebViewStyles}
       ref={webviewRef}
       decelerationRate="normal" // Make scrolling feel native on iOS
       source={{uri: reConstructedUri}}
       onLoadEnd={handleLoadEnd}
       injectedJavaScript={INJECTED_JAVASCRIPT}
       onMessage={() => {}}
       javaScriptEnabled
       // 新增安卓端文件访问权限配置
       allowFileAccess={true}
       allowFileAccessFromFileURLs={true}
       allowUniversalAccessFromFileURLs={true}
/>

如果以上方案都不满足需求,可直接拦截WebView的文件选择请求,通过RN端自研的文件选择能力完成上传后,将文件内容/路径通过postMessage回传给WebView,完全绕过原生WebView的自带文件选择逻辑。

内容的提问来源于stack exchange,提问作者Lulzim Fazlija

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 21:27:00