当前位置: 首页 > 知识库问答 >
问题:

javascript - react-native-webview与vue页面通信问题?

夏谦
2024-01-08

react-native项目中使用react-native-webview嵌入vue页面,两种方式,在不同机型上无效.

方式一:直接使用window.postMessage(例如在 vivo z3手机(android9) 上vue页面监听方法不执行)

rn页面:      function injectJavascriptFun(params) {        const str = `(function() {          window.postMessage(1);        })()`;        injectJavaScript(str);      }vue页面:  window.addEventListener('message', (event) => {})

方式二:使用window.WebViewBridge.onMessage(例如在 小米手机(android13) 上vue页面监听方法不执行)

rn页面: function injectJavascriptFun(params) {      const str = `(function() {       window.WebViewBridge.onMessage(${JSON.stringify(params)});      })()`;      injectJavaScript(str);    }    injectJavascriptFun(sendData);vue页面:  window.WebViewBridge = {    onMessage:function (data){      store.commit('user/setRNWebview', data)    }  }  const event = new Event('WebViewBridge')  window.dispatchEvent(event);

以上两种方式在其他一些测试机例如iphone15pro、一加(android13),华为手机上都生效,该用什么区分调用两种方法呢?

共有2个答案

夏骏
2024-01-08

如果两个项目跨域了,那么通讯肯定是不行的,你只要保证两个项目没跨域,解决方案就很容易

华峰
2024-01-08

这个问题看起来是在使用 React Native 的 WebView 组件来加载 Vue 页面时,出现了通信问题。我会尝试给出一些可能的解决方案。

首先,关于方式一,即使用 window.postMessage 的问题,这个方法依赖于浏览器的 postMessage API,它允许一个窗口向另一个窗口发送消息。然而,如果你在 Android 手机上遇到问题,这可能是由于不同 Android 版本之间浏览器实现差异所导致的。你可能需要检查你的 Android 版本是否支持 postMessage API,或者尝试更新你的 WebView 组件。

对于方式二,即使用 window.WebViewBridge.onMessage,这个方法依赖于 WebViewBridge,它是一个用于 WebView 和 JavaScript 之间的通信的库。如果你在 Android 手机上遇到问题,这可能是由于 WebViewBridge 的兼容性问题。你可能需要检查你的 WebViewBridge 版本是否与你的 Android 版本兼容,或者尝试更新你的 WebViewBridge。

另外,这两种方式都需要在 Vue 页面中监听消息,如果 Vue 页面没有正确地监听消息,那么消息就可能无法被正确地接收。请确保你在 Vue 页面中正确地设置了事件监听器。

最后,如果你仍然遇到问题,你可能需要尝试使用其他方式来实现 React Native 和 Vue 之间的通信,例如使用 WebSocket 或者 HTTP 请求。

 类似资料:
  • Service Worker 没有直接操作页面 DOM 的权限,但是可以通过 postMessage 方法和 Web 页面进行通信,让页面操作 DOM。而且这种通信可以是双向的,类似于 iframe 之间的通信。下面就给大家介绍 postMessage 在项目中的一些使用场景。注意下面的前提是浏览器支持 Service Worker。 下文的 service-worker.js 文件,简称为 sw

  • 本文向大家介绍通过伪协议解决父页面与iframe页面通信的问题,包括了通过伪协议解决父页面与iframe页面通信的问题的使用技巧和注意事项,需要的朋友参考一下 我们经常会有父页面与iframe页面的操作,比如 <iframe id = "iframe"></iframe> 这个iframe里面的内容是js写的。如以下代码 以上代码在大多数情况下是对的。但有种情况,即父页面显式的写了document

  • 我有个小程序页面,里面是正常的小程序页面内容,我想在这个页面的某个位置 局部嵌入一个webview 页面 请问可以做到吗?还是一定要一个只能是webview的跳转页面才可以? 我想局部嵌入webview 之后,在底部增加 拒绝和同意两个按钮

  • 我正在构建一个混合反应原生RubyonRails应用程序。我正在使用组件中的来检测页面中的更改,并使用它来更改react native navigation菜单。这很好,但当我尝试使用时,页面中可能会有更改,但不会触发。 使用以下代码触发导航状态更改 这可以正常工作,但如果我在ROR应用程序中打开TurboLink,则不再触发。 我该如何解决这个问题?

  • 我在编译时没有错误,实际上这是从哪里冒出来的。其他人有这个错误吗? 任务:react-native-webview:compiledebugjavawithjavac注意:/user_data/projects/react-native/populi/node_modules/react-native-webview/android/src/main/java/com/reactnativeCom