react-native-导航

「React Native」react-native-webvi

2020-05-27  本文已影响0人  七月流火_9405

一、背景说明:

RN升级到0.61.5之后,webview从react native官方api中删除,官方推荐采用react-native-webview

二、react-native-webview与h5交互

1.rn给h5发事件,可以通过拿到webview的ref,this.webview.postMessage("")发消息。
2.h5给rn发事件,bridge name更新了,需要h5采用window.ReactNativeWebView.postMessage("")发消息。RN webview就可以通过onMessage收到消息。

三、安卓交互实现

1.h5给安卓,是通过bridge name,addJavascriptInterface方式来收到h5的消息。
2.安卓给h5,是通过自执行function,document.dispatchEvent。

四、苹果交互实现

亮点:磨平平台差异的核心源码

    NSString *source = [NSString stringWithFormat:
      @"window.%@ = {"
       "  postMessage: function (data) {"
       "    window.webkit.messageHandlers.%@.postMessage(String(data));"
       "  }"
       "};", MessageHandlerName, MessageHandlerName
    ];

1.h5给苹果,通过自执行函数,将window.ReactNativeWebView.postMessage转换成ios交互 window.webkit.messageHandlers.ReactNativeWebView.postMessage(String(data))

  1. 苹果给h5,也是通过自执行函数,window.dispatchEvent。

五、坑

APP给h5发消息,安卓和苹果发送消息方式不一致。安卓通过document.dispatchEvent,苹果通过window.dispatchEvent。因此h5只通过document.addEventListener是无法收到ios消息的。

六、解决方法

ios修改与h5交互的方法,将window改为document与安卓一致。因为window的作用域比document更大,且影响更广。

上一篇下一篇

猜你喜欢

热点阅读