未触发 React Native WebView onMessage()

Posted

技术标签:

【中文标题】未触发 React Native WebView onMessage()【英文标题】:React Native WebView onMessage() is not triggered 【发布时间】:2021-09-27 18:31:52 【问题描述】:

我在 S3 上托管了一个静态站点,上面有 CloudFront 发行版。

<WebView
  ref=webViewRef
  scrollEnabled=false
  source= uri: Config.REMOTE_URL  // CloudFront URL
  sharedCookiesEnabled=true
  onMessage=(event) => receivedMessageFromWebView(event.nativeEvent.data)
/>

我们postMessage() 上网的方式是这样的

const sendDataToWebView = (dataMap: any) => 
  const dataToPost =  type: 'data', data: dataMap ;
  const postMessageJSCode = `
    window.postMessage($JSON.stringify(dataToPost), "*");
    true;
  `;
  if (webViewRef && webViewRef.current) 
    webViewRef.current.injectjavascript(postMessageJSCode);
  

onMessage的实现如下

const receivedMessageFromWebView = (msgData: any) => 
  console.log('Data Received from WebView -->', msgData); // <-- Not working
;

我在这里错过了什么?

反应:17.0.2 ReactNative:0.64.2 Web 视图:11.6.5

【问题讨论】:

【参考方案1】:

而不是window.postMessage试试window.ReactNativeWebView.postMessage

https://github.com/react-native-webview/react-native-webview/blob/master/docs/Reference.md#onmessage

或者文档已经是本地和 webview 之间通信的详细信息:https://github.com/react-native-webview/react-native-webview/blob/master/docs/Guide.md#communicating-between-js-and-native

【讨论】:

以上是关于未触发 React Native WebView onMessage()的主要内容,如果未能解决你的问题,请参考以下文章

react native 中的 branch.io 自定义事件未触发奖励规则

React-Native,条纹卡元素未显示实时 API 密钥

React Native 问题:WebView 已从 React Native 中移除

WebView(react-native-webview)在 Expo SDK36 中获取错误代码 -1

React Native WebView 状态栏

React Native开发React Native控件之WebView组件详解以及实例使用(22)