WebView ist eine Komponente in ReactNative. Sie kann eine native WebView erstellen und für den Zugriff auf eine Webseite verwendet werden. In diesem Artikel wird hauptsächlich der Beispielcode für die Kommunikation zwischen ReactNative und WebView vorgestellt Ich werde es jetzt mit Ihnen teilen, auch als Referenz für alle. Folgen wir dem Herausgeber und schauen wir uns das an. Ich hoffe, es kann allen helfen.
Manchmal müssen wir zwischen RN und WebView kommunizieren oder Daten übertragen oder Nachrichtenbenachrichtigungen senden. Zu diesem Zeitpunkt müssen wir die folgenden Kenntnisse verwenden.
1: WebView sendet Daten an das RN-Ende:
Zuerst erstellen wir eine Webansicht:
<WebView ref={'webview'} source={require('./index.html')} style={{width: 375, height: 220}} onMessage={(e) => { this.handleMessage(e) }} />
Sie können sehen, dass es eine onMessage-Methode gibt,
onMessage-Funktion
Die diesem Attribut entsprechende Funktion kann ausgelöst werden, wenn die window.postMessage-Methode aufgerufen wird die Webseite innerhalb der Webansicht, wodurch der Datenaustausch zwischen Webseiten und RN realisiert wird. Beim Festlegen dieser Eigenschaft wird eine globale PostMessage-Funktion in die Webansicht eingefügt und überschreibt die möglicherweise bereits vorhandene Implementierung mit demselben Namen.
Window.postMessage auf der Webseite sendet nur einen Parameterdatenwert, der im Ereignisobjekt auf der RN-Seite gekapselt ist, nämlich event.nativeEvent.data. Daten können nur eine Zeichenfolge sein.
Es ist ersichtlich, dass diese Methode zum Empfangen von Daten aus Webview (d. h. HTML) verwendet wird.
Die interne Implementierung verarbeitet die empfangenen Daten:
handleMessage(e) { this.setState({webViewData: e.nativeEvent.data}); }
e.nativeEvent.data sind die Daten, die aus der Webansicht gesendet werden
Dies allein reicht nicht aus. Dies ist nur die Verarbeitung auf der Rn-Seite. Wir müssen auch eine Methode zum Senden von Daten in HTML schreiben:
var data = 0; function sendData(data) { if (window.originalPostMessage) { window.postMessage(data); } else { throw Error('postMessage接口还未注入'); } } document.getElementById('button').onclick = function () { data += 100; sendData(data); }
window.postMessage dient zum Senden von Daten an RN.
Zweitens: RN sendet Daten an Webview:
Definieren Sie zunächst eine Methode zum Senden von Daten:
sendMessage() { this.refs.webview.postMessage(++this.data); }
Dieser Schritt ist sehr einfach.
Schreiben Sie einfach die Daten, die Sie senden möchten, als Parameter in diese Methode.
Dann muss es einen entsprechenden Datenempfang in der HTML-Methode geben:
window.onload = function () { document.addEventListener('message', function (e) { document.getElementById('data').textContent = e.data; }); }
Dies kann die Kommunikation zwischen Rn und Webview realisieren. Nach
fügen Sie den Quellcode ein:
<!DOCTYPE html> <html lang="en"> <head> <title></title> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> </head> <body> <p style="text-align: center"> <button id="button">发送数据到react native</button> <p style="text-align: center">收到react native发送的数据: <span id="data"></span></p> </p> <script> var data = 0; function sendData(data) { if (window.originalPostMessage) { window.postMessage(data); } else { throw Error('postMessage接口还未注入'); } } window.onload = function () { document.addEventListener('message', function (e) { document.getElementById('data').textContent = e.data; }); document.getElementById('button').onclick = function () { data += 100; sendData(data); } } </script> </body> </html>
web.js:
/** * Created by 卓原 on 2017/8/17. * zhuoyuan93@gmail.com */ import React from 'react'; import { View, Text, StyleSheet, WebView } from 'react-native'; export default class Web extends React.Component { constructor(props) { super(props); this.state = { webViewData: '' } this.data = 0; } sendMessage() { this.refs.webview.postMessage(++this.data); } handleMessage(e) { this.setState({webViewData: e.nativeEvent.data}); } render() { return ( <View style={styles.container}> <View style={{width: 375, height: 220}}> <WebView ref={'webview'} source={require('./index.html')} style={{width: 375, height: 220}} onMessage={(e) => { this.handleMessage(e) }} /> </View> <Text>来自webview的数据 : {this.state.webViewData}</Text> <Text onPress={() => { this.sendMessage() }}>发送数据到WebView</Text> </View> ) } } const styles = StyleSheet.create({ container: { flex: 1, marginTop: 22, backgroundColor: '#F5FCFF', }, });
Verwandte Empfehlungen:
JS klickt interaktiv auf das Bild in WKWebView und zeigt eine Vorschau des Beispiels an
Detaillierte Erläuterung der WebView-Wissenspunkte
Detaillierte Beschreibung Erklärung zum Laden von HTML-Code mit WebView
Das obige ist der detaillierte Inhalt vonÜber die Kommunikation zwischen React Native und Webview. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!