获取WebView中脚本对react本机的事件响应



我正在使用html脚本来显示一些模块。一切都很完美,直到我没有得到eventHandler的任何响应。如何在Web视图中获取事件处理程序的响应。我没有获取任何onSuccess、onError或onClose方法的日志。我使用的是react原生webview。我尝试使用window.postMessage("成功"(;并获取onMessage 上的值

this.khaltiUI = `<html>
<head>
<script src="https://khalti.com/static/khalti-checkout.js"></script>
</head>
<body>
<script>
var config = {
// replace the publicKey with yours
"publicKey": "test_public_key_dc74e0fd57cb46cd93832aee0a390234",
"productIdentity": "1234567890",
"productName": "Dragon",
"productUrl": "http://gameofthrones.wikia.com/wiki/Dragons",
"eventHandler": {
onSuccess (payload) {
window.postMessage('onSuccess');
console.log(payload);
},
onError (error) {
window.postMessage('onError')
console.log(error);
},
onClose () {
window.postMessage('onClosed')
console.log('widget is closing');
}
}
};
var checkout = new KhaltiCheckout(config);
checkout.show({amount: 1000, mobile: 9800000000});
</script>
</body>
</html>`

在react原生webView组件中:

<WebView
source={{html: this.khaltiUI }}
originWhitelist={["*"]}
scalesPageToFit={false}
style={{position: 'absolute', top: 0, bottom: 0, right: 0, left: 0}}
onMessage={this.onMessage}
startInLoadingState ={true}
/>
onMessage(event){
console.log('Hello');  //got no any response
console.log(JSON.parse(event.nativeEvent.data));
console.log(event.nativeEvent.data);
}

这是我用来从webview发送数据以响应本机的:

反应:

import React, { Component } from "react";
import { WebView } from "react-native-webview";
export default class App extends Component {
_bridge(event) {
if(event.nativeEvent.data == 'exit') {
BackHandler.exitApp();
}
}
render() {
return (
<WebView
style={{flex: 1}}
source={{ uri: "https://www.kende.com/" }}
onMessage={event => { this._bridge(event); }}
/>
);
}
}

html:

<script>
$( document ).ready(function() {
$('#exit').on('click', function(){
window.ReactNativeWebView.postMessage("exit");
});
});
</script> 
<span id="exit">Exit</span>

要将数据发布到网页,首先必须获得WebView:的ref

<WebView
ref={(webView) => this.webView = webView}
onMessage={this.onMessage}
...
/>

然后发布这样的消息:

sendPostMessage() {
console.log("Sending post message");
this.webView.postMessage("Post message from react native");
}

最新更新