在react native中完成工作后如何关闭webview
How to close webview after the work is done in react native
我正在使用以下代码来呈现网络视图:
const someHTMLFile = require('./somefile.html')
render() {
return (
<View style={{flex: 1}}>
<WebView
style={{flex: 1}}
source={someHTMLFile}
ref={( webView ) => this.webView = webView}
/>
</View>
);
}
在这个 html 文件中,有一个在 webview 加载时自动提交的表单(一些数据从代码的 reactnative 部分发送),最后,文件被重定向到特定的 url,其中完成了一些处理(在发送数据上),而现在,它 returns 什么都没有。所以屏幕变黑了。
所以,在这一点上,我想关闭 webview 并将用户带回我的 reactnative 应用程序。那么,我该怎么做呢?有什么建议吗?
Webview 具有 onNavigationStateChange 属性,这将为 webview 加载开始或结束时提供基础。
因此,您可以使用这些道具来检查当前状态或 webview 的当前 URL,并设置一些条件来关闭 webview。
render() {
return (
<View style={{flex: 1}}>
<WebView
style={{flex: 1}}
onNavigationStateChange={(e) => {
console.warn("current state is ", JSON.stringify(e, null, 2));
/** put your comdition here based here and close webview.
Like if(e.url.indexOf("end_url") > -1)
Then close webview
*/
}}
source={someHTMLFile}
onLoadEnd={()=>{
/* add you work that you want to do after loading is done. */
}}
ref={(webView) => this.webView = webView}
/>
</View>
);
}
关闭WebView
基本上等于卸载组件。您可以进行条件渲染来挂载和卸载组件。通常的行为是打开一个 Modal
,里面有一个 WebView
。完成 WebView
后,您可以发送一条消息进行反应,然后关闭模式。这将卸载模式和 WebView
.
您可以使用 onMessage
prop 在 WebView 和 React-Native 之间进行通信。
A function that is invoked when the webview
calls
window.postMessage
. Setting this property will inject a
postMessage
global into your webview
, but will still call
pre-existing values of postMessage
.
例子
_onMessage = (message) => {
console.log(message);
}
render() {
return (<WebView ref={(ref) => { this.webView = ref; }} onMessage={this._onMessage} ..otherProps />);
}
// In your webview inject this code
<script>
window.postMessage("Sending data from WebView");
</script>
只需在 Webview Checkout 组件中制作此道具即可:
<WebView onMessage={event => event.nativeEvent.data === 'WINDOW_CLOSED' ? onClose() : onPaymentSuccess(event.nativeEvent.data)} />
我正在使用以下代码来呈现网络视图:
const someHTMLFile = require('./somefile.html')
render() {
return (
<View style={{flex: 1}}>
<WebView
style={{flex: 1}}
source={someHTMLFile}
ref={( webView ) => this.webView = webView}
/>
</View>
);
}
在这个 html 文件中,有一个在 webview 加载时自动提交的表单(一些数据从代码的 reactnative 部分发送),最后,文件被重定向到特定的 url,其中完成了一些处理(在发送数据上),而现在,它 returns 什么都没有。所以屏幕变黑了。
所以,在这一点上,我想关闭 webview 并将用户带回我的 reactnative 应用程序。那么,我该怎么做呢?有什么建议吗?
Webview 具有 onNavigationStateChange 属性,这将为 webview 加载开始或结束时提供基础。
因此,您可以使用这些道具来检查当前状态或 webview 的当前 URL,并设置一些条件来关闭 webview。
render() {
return (
<View style={{flex: 1}}>
<WebView
style={{flex: 1}}
onNavigationStateChange={(e) => {
console.warn("current state is ", JSON.stringify(e, null, 2));
/** put your comdition here based here and close webview.
Like if(e.url.indexOf("end_url") > -1)
Then close webview
*/
}}
source={someHTMLFile}
onLoadEnd={()=>{
/* add you work that you want to do after loading is done. */
}}
ref={(webView) => this.webView = webView}
/>
</View>
);
}
关闭WebView
基本上等于卸载组件。您可以进行条件渲染来挂载和卸载组件。通常的行为是打开一个 Modal
,里面有一个 WebView
。完成 WebView
后,您可以发送一条消息进行反应,然后关闭模式。这将卸载模式和 WebView
.
您可以使用 onMessage
prop 在 WebView 和 React-Native 之间进行通信。
A function that is invoked when the
webview
callswindow.postMessage
. Setting this property will inject apostMessage
global into yourwebview
, but will still call pre-existing values ofpostMessage
.
例子
_onMessage = (message) => {
console.log(message);
}
render() {
return (<WebView ref={(ref) => { this.webView = ref; }} onMessage={this._onMessage} ..otherProps />);
}
// In your webview inject this code
<script>
window.postMessage("Sending data from WebView");
</script>
只需在 Webview Checkout 组件中制作此道具即可:
<WebView onMessage={event => event.nativeEvent.data === 'WINDOW_CLOSED' ? onClose() : onPaymentSuccess(event.nativeEvent.data)} />