[英]How can I send a data to webview by clicking on react native button
我使用了 componentDidMount 方法,该方法将数据正确发送到 webview,但是当我单击特定的 react native 按钮时,我想发送数据 webview。
在此 webview 中显示本地 html 页面,在此我将数据发送到 webview 和 html 页面中的加载事件警报在这个 componentdidmount 方法中由 react native 发送的数据成功地将数据发送到 webview html 页面但是当我'在方法中尝试相同的代码,它说this.input
是未定义的。
export default class HtmlRender extends Component {
//error:this.input is undefined
sendData() {
this.input.postMessage( data )
}
// This Is working
componentDidMount(){
this.input.postMessage( data)
}
render(){
return (
<View style={styles.fullContainer}>
<View style={styles.webviewBorder} >
<WebView
ref={(input) => this.input = input}
source={{uri:'file:///android_asset/Page.html'}}
/>
</View>
<View >
<Button onPress={this.sendData}>
<Text>
Data
</Text>
</Button>
</View>
</View >
)}
我使用了componentDidMount方法,该方法可以将数据正确发送到webview,但是当我单击特定的react native按钮时,我想发送数据webview。
在此webview中显示本地html页面,在此中,我将数据发送到webview,并且在html页面中发生加载事件时,此componentdidmount方法中的react native发送的数据已成功将数据发送到webview html页面,但是当我正在尝试说this.input
未定义的方法中的相同代码。
export default class HtmlRender extends Component {
//error:this.input is undefined
sendData() {
this.input.postMessage( data )
}
// This Is working
componentDidMount(){
this.input.postMessage( data)
}
render(){
return (
<View style={styles.fullContainer}>
<View style={styles.webviewBorder} >
<WebView
ref={(input) => this.input = input}
source={{uri:'file:///android_asset/Page.html'}}
/>
</View>
<View >
<Button onPress={this.sendData}>
<Text>
Data
</Text>
</Button>
</View>
</View >
)}
我使用了componentDidMount方法,该方法可以将数据正确发送到webview,但是当我单击特定的react native按钮时,我想发送数据webview。
在此webview中显示本地html页面,在此中,我将数据发送到webview,并且在html页面中发生加载事件时,此componentdidmount方法中的react native发送的数据已成功将数据发送到webview html页面,但是当我正在尝试说this.input
未定义的方法中的相同代码。
export default class HtmlRender extends Component {
//error:this.input is undefined
sendData() {
this.input.postMessage( data )
}
// This Is working
componentDidMount(){
this.input.postMessage( data)
}
render(){
return (
<View style={styles.fullContainer}>
<View style={styles.webviewBorder} >
<WebView
ref={(input) => this.input = input}
source={{uri:'file:///android_asset/Page.html'}}
/>
</View>
<View >
<Button onPress={this.sendData}>
<Text>
Data
</Text>
</Button>
</View>
</View >
)}
我使用了componentDidMount方法,该方法可以将数据正确发送到webview,但是当我单击特定的react native按钮时,我想发送数据webview。
在此webview中显示本地html页面,在此中,我将数据发送到webview,并且在html页面中发生加载事件时,此componentdidmount方法中的react native发送的数据已成功将数据发送到webview html页面,但是当我正在尝试说this.input
未定义的方法中的相同代码。
export default class HtmlRender extends Component {
//error:this.input is undefined
sendData() {
this.input.postMessage( data )
}
// This Is working
componentDidMount(){
this.input.postMessage( data)
}
render(){
return (
<View style={styles.fullContainer}>
<View style={styles.webviewBorder} >
<WebView
ref={(input) => this.input = input}
source={{uri:'file:///android_asset/Page.html'}}
/>
</View>
<View >
<Button onPress={this.sendData}>
<Text>
Data
</Text>
</Button>
</View>
</View >
)}
我使用了componentDidMount方法,该方法可以将数据正确发送到webview,但是当我单击特定的react native按钮时,我想发送数据webview。
在此webview中显示本地html页面,在此中,我将数据发送到webview,并且在html页面中发生加载事件时,此componentdidmount方法中的react native发送的数据已成功将数据发送到webview html页面,但是当我正在尝试说this.input
未定义的方法中的相同代码。
export default class HtmlRender extends Component {
//error:this.input is undefined
sendData() {
this.input.postMessage( data )
}
// This Is working
componentDidMount(){
this.input.postMessage( data)
}
render(){
return (
<View style={styles.fullContainer}>
<View style={styles.webviewBorder} >
<WebView
ref={(input) => this.input = input}
source={{uri:'file:///android_asset/Page.html'}}
/>
</View>
<View >
<Button onPress={this.sendData}>
<Text>
Data
</Text>
</Button>
</View>
</View >
)}
将数据从 React Native 发送到 Webview
反应本机代码
constructor (props) {
super(props);
this.state = { }
this.webView = React.createRef();
}
sendDataToWebView = (dataObject) => {
this.webView.injectJavaScript(`( function() {
document.dispatchEvent( new MessageEvent('message', {
data: ${JSON.stringify(dataObject)},
origin : 'react-native'
})); })();` );
}
render() {
return(
<WebView
source={{ ... }}
containerStyle={{ ... }}
ref={(webView) => this.webView = webView}
/>)
}
网页浏览代码
if(window.ReactNativeWebView) {
window.addEventListener("message", this.webViewEventHandler); //android
document.addEventListener("message", this.webViewEventHandler); //ios
}
webViewEventHandler = (event) => {
if (event.origin == 'react-native'){
console.log(event.data) //get dataObject
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.