反应本机Webview进程终止

man*_*urt 6 webview react-native

我使用 React Native 在 Web 视图上显示本地 HTML,我注意到有时 WebView 会随机崩溃,并且我在控制台上收到消息:

Webview Process Terminated
Run Code Online (Sandbox Code Playgroud)

我已经搜索过,但找不到任何答案?那是什么?为什么会发生?如何避免它或在该错误后重新加载网页视图?

 <WebView
      style={styles.webContainer}
      originWhitelist={['*']}
      source={isAndroid ? {uri:'file:///android_asset/binaura.html'} : HTML_FILE}

      javaScriptEnabled={true}
          domStorageEnabled={true}

    />
Run Code Online (Sandbox Code Playgroud)

pji*_*ers 9

如果“WebView”您的意思是react-native-webview

如果 WebView 使用太多资源,就会在iOS上发生这种情况,并导致 WebView 崩溃(显示空白页)或应用程序冻结。

有一个回调属性(在此 PRonContentProcessDidTerminate中介绍),您可以使用它来侦听终止并通过更新其密钥来强制重新加载 WebView。这有点像黑客,但它确实有效。

使用示例:

class MyComponent extends Component {
  state = {
    webviewKey: 0,
  }

  reload() {
    this.setState({
      webviewKey: this.state.webviewKey + 1,
    })
  }

  render() {
    return (
      <WebView
        key={this.state.webviewKey}
        onContentProcessDidTerminate={this.reload}
      />
    )
  }
}

Run Code Online (Sandbox Code Playgroud)


Chr*_*jon 7

@pjivers 的回答让我们走上了正确的道路,但当前的react-native-webview 已经有了一个reload()可以使用的方法。您只需要一些参考设置即可调用它:

class MyComponent extends Component {
  constructor(props) {
    super(props);

    this.webViewRef = React.createRef();
  }

  render() {
    return (
      <WebView
        ref={this.webViewRef}
        onContentProcessDidTerminate={this.webViewRef.current?.reload}
      />
    )
  }
}
Run Code Online (Sandbox Code Playgroud)