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)
如果“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)
@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)
| 归档时间: |
|
| 查看次数: |
6230 次 |
| 最近记录: |