ReactNative <-> WebView invoke/events communication
npm i hybro
Install and link react-native-webview
npm i react-native-webview
react-native link react-native-webview
import { HybroView, } from 'hybro/native';
const packages = {
'react-native': require('react-native'),
};
const uri = __DEV__
? 'http://localhost:8080/index.html'
: Platform.select({
android: 'file:///android_asset/www/index.html',
ios: './www/index.html',
});
<HybroView
packages={packages}
source={{ uri }}
originWhitelist={['*']}
mixedContentMode={'always'}
allowUniversalAccessFromFileURLs
/>
Assumes you build web app into android/app/src/main/assets/www
and into ios/www
.
Add ios/www
folder into Xcode project (also into Copy Bundle Resources
Build Phase).
For DEV don't forget to reverse 8080 port for Android emulator:
adb reverse tcp:8080 tcp:8080
- packages - object of plugged packages with names to call from web side
import { invoke, addEventListener, removeEventListener, } from 'hybro';
- pckg: String - plugged package name
- mdl: String - module of plugged package
- method: String - name of invoked method
- params: Array - arguments
invoke('react-native', 'Linking', 'getInitialURL')
.then((url) => {
if (url) {
console.log('Initial url is: ' + url);
}
})
.catch(err => console.error('An error occurred', err));
invoke('react-native', 'Linking', 'openURL', [url]);
- pckg: String - plugged package name
- mdl: String - module of plugged package
- evnt: String - event type
- listener: Function or EventListener - listener function or object
addEventListener('react-native', 'Linking', 'url', handleOpenUrl);
- pckg: String - plugged package name
- mdl: String - module of plugged package
- evnt: String - event type
- listener: Function or EventListener - listener function or object
removeEventListener('react-native', 'Linking', 'url', handleOpenUrl);