React Native WebView extension with 2-way event-based communication API
- Installation
- Roadmap
- Usage
- API Docs
npm install react-native-webview-messaging
or with yarn
yarn add react-native-webview-messaging
- channel for redux actions
- enhanced dev environment
import React, { Component } from 'react';
import { View, TouchableHighlight } from 'react-native';
import { WebView } from 'react-native-webview-messaging/WebView';
export class ExampleView extends Component {
render() {
return (
<View>
<WebView
ref={ webview => { this.webview = webview; }}
source={ require('./some-page.html') }
/>
<TouchableHighlight onPress={this.sendMessageToWebView} underlayColor='transparent'>
<Text>Send message to WebView</Text>
</TouchableHighlight>
</View>
)
}
componentDidMount() {
this.webview.messagesChannel.on('text', text => console.log(text));
this.webview.messagesChannel.on('json', json => console.log(json));
this.webview.messagesChannel.on('custom-event-from-webview', eventData => console.log(eventData));
}
sendMessageToWebView = () => {
this.webview.sendJSON({
payload: 'JSON from RN'
});
this.webview.send('plain text from RN');
this.webview.emit('custom-event-from-rn', { payload: 'Custom event from RN' });
}
}
import RNMsgChannel from 'react-native-webview-messaging';
RNMsgChannel.on('text', text => console.log(text));
RNMsgChannel.on('json', json => console.log(json));
RNMsgChannel.on('custom-event-from-rn', data => console.log(data));
RNMsgChannel.send('plain text from WebView');
RNMsgChannel.sendJSON({
payload: 'JSON from WebView'
});
RNMsgChannel.emit('custom-event-from-webview', { payload: 'Custom event from WebView' })
extends WebView from react-native
// es6 modules
import { WebView } from 'react-native-webview-messaging/WebView';
// commonJS
const { WebView } = require('react-native-webview-messaging/WebView');
Emits 'text'
event on RNMessagesChannel
inside WebView
Emits 'json'
event on RNMessagesChannel
inside WebView
Emits custom event on RNMessagesChannel
inside WebView
Emits events sent from WebView
'text'
- emitted whenRNMessagesChannel#send(text: String)
is called in WebView'json'
- emitted whenRNMessagesChannel#sendJSON(json: Object)
is called in WebView- you can also emit custom events with
RNMessagesChannel#emit(eventName: String, [eventData: Object])
method
extends EventEmitter
Emits events sent from RN app
'text'
- emitted whenWebView#send(text: String)
is called in RN app'json'
- emitted whenWebView#sendJSON(json: Object)
is called in RN app- you can also emit custom events with
WebView#emit(eventName: String, [eventData: Object])
method
Emits 'text'
event to WebView#messagesChannel
in RN app
Emits 'json'
event to WebView#messagesChannel
in RN app
Emits custom event to WebView#messagesChannel
in RN app
// es6 modules
import RNMessagesChannel from 'react-native-webview-messaging';
// commonJS
const RNMessagesChannel = require('react-native-webview-messaging');
MIT