如何在 react-native webView 和 React web-app 之间进行通信?

Posted

技术标签:

【中文标题】如何在 react-native webView 和 React web-app 之间进行通信?【英文标题】:how to Communicate between react-native webView and a React web-app? 【发布时间】:2020-10-07 13:57:58 【问题描述】:

我正在尝试在 react-native 中的 webView 和使用 React-360(当然还有 React)创建的 web 应用程序之间创建通信。 我正在使用 react-native-webview 并在此链接上按照本指南创建通信: https://github.com/react-native-community/react-native-webview/blob/master/docs/Guide.md 使用页面中的示例,在脚本部分使用带有函数window.ReactNativeWebView.postMessage(data) 的简单 html 页面(如链接中的示例),效果很好:

 <WebView
  source=uri: this.props.link

    ref=( webView ) => this.webView = webView

    onMessage=event => 
      alert(event.nativeEvent.data);
    
  />

然而,我的目的是在我单击按钮时在 webView window.ReactNativeWebView.postMessage(data) 中调用我的 Web 应用程序,例如使用如下函数:

homeButtonClicked() 
    console.log("sei uscito, torna all'App!")
    window.ReactNativeWebView.postMessage(data);

不幸的是,当我单击按钮时,出现以下错误: Cannot read property 'postMessage' of undefined。我该如何解决这个问题?谢谢大家。

【问题讨论】:

【参考方案1】:

你能试试文档中的超时功能吗

setTimeout(function () 
   window.ReactNativeWebView.postMessage("Hello!")
, 2000)

【讨论】:

【参考方案2】:

我在 React-360 存储库中的一个旧问题中找到了问题的解决方案。 React-360 代码无法访问窗口,因此有必要将代码放在本机模块中,然后可以从那里向 react-native 应用程序发送消息。 问题链接:https://github.com/facebook/react-360/issues/241

【讨论】:

以上是关于如何在 react-native webView 和 React web-app 之间进行通信?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 WebView [React-Native] 中禁用用户文本选择

如何在没有 webview 的情况下将 vimeo 播放器嵌入 react-native?

如何在WebView中禁用用户文本选择[React-Native]

如何在 react-native webView 和 React web-app 之间进行通信?

如何在 Detox 中控制 React-Native webview?

如何在 React-Native Webview 的注入 JavaScript 道具中使用 RegExp?