React Native WebView js与native相互通信

1,202 阅读1分钟

正文

有过Android开发经验的同学应该都比较了解原生webview中js与java的交互方式,这里为了不使后面介绍RN过于生硬,对安卓的实现做下简单介绍。

一、安卓webview中js与java交互

例如,安卓原生应用中有一个套餐支付的功能是使用H5实现,H5功能模块中调用支付宝或微信支付时需要调用原生应用进行支付,这样H5代码里面就需要调用java方法调起支付。

1、首先定义一个java类JavaScriptUtils,在类中定义方法pay

2、pay方法添加注解@JavascriptInterface

3、将声明的JavaScriptUtils类设置给webView供js调用

webView.addJavascriptInterface(new JavaScriptUtils(this), "JavaScriptUtils");

比较简单,这里就不具体罗列相关代码实现了。

二、RN的webview中js与java交互

react native这里我们使用开源库react-native-webview

还是同样的场景,但是这里不再是原生webview,而是RN中直接使用react-native-webview提供的webview组件,这里在给js提供支付pay方法的实现方式跟原生不一样了(保证H5代码的调用方式不变,即同一套H5代码可以在原生和RN上都可用),通过官方文档  介绍发现,其提供了一中js注入的方式,既injectedJavaScript方法,具体介绍如下:

介绍乍一看好像挺明白,就是在js中调用window.ReactNativeWebView.postMessage, 然后在RN代码的onMessage方法接收调用就可以了,但是唯一麻烦的就是怎么写我们具体场景的js代码块,然后注入到H5中,我们还是要将JavaScriptUtils类的pay方法提供给js调用,具体代码块如下:

const INJECTED_JAVASCRIPT = `window.JavaScriptUtils = {pay(payType){window.ReactNativeWebView.postMessage(payType)}};    `;