react-native-webview使用postMessage后H5不能监听问题(iOS和安卓的兼容问题)

javascript 复制代码
/* 监听rn消息 */
const eventListener = nativeEvent => {
    //解析数据actionType、extra
    const {actionType, extra} = nativeEvent.data && JSON.parse(nativeEvent.data) || {}
}
//安卓用document,ios用window
window.addEventListener('message', eventListener);
document.addEventListener('message', eventListener);
javascript 复制代码
import uaParser from 'ua-parser-js'

let timer
let ua = uaParser(navigator.userAgent)

const handleWatchRNMessage = () => {
  if (window.ReactNativeWebView) {
    window.ReactNativeWebView.postMessage(JSON.stringify({ type: 'getToken' }))
  }

  const eventListener = (e) => {
    console.log('message', e.data)
    let payload = e.data ? JSON.parse(e.data) : {}
    let type = payload.type

    if (type === 'getToken') {
      localStorage.setItem('token', payload.token)
    } else if (type === 'getBrowserInfo') {
      const { browser } = ua
      window.ReactNativeWebView.postMessage(JSON.stringify({ type, browser }))
    }
  }

  if (window.platform === 'rn') {
    if (ua.os.name === 'iOS') {
      window.addEventListener('message', eventListener)
    } else {
      window.document.addEventListener('message', eventListener)
    }
  }
}

handleWatchRNMessage()

参考链接:

https://blog.csdn.net/liuxingyuzaixian/article/details/125199131

https://chat.xutongbao.top/

相关推荐
歪歪1009 小时前
React Native开发Android&IOS流程完整指南
android·开发语言·前端·react native·ios·前端框架
歪歪10011 小时前
React Native开发有哪些优势和劣势?
服务器·前端·javascript·react native·react.js·前端框架
勤劳打代码11 小时前
触类旁通 —— Flutter 与 React 对比解析
前端·flutter·react native
若梦plus12 小时前
多端开发之React-Native原理浅析
前端·react native
XiaoSong12 小时前
React Native 主题配置终极指南,一篇文章说透
前端·react native·react.js
程序员老刘1 天前
跨平台开发地图:客户端技术选型指南 | 2025年10月
flutter·react native·客户端
Cxiaomu2 天前
React Native 项目中 WebSocket 的完整实现方案
websocket·react native·react.js
少卿2 天前
react-native图标替换
前端·react native
少卿2 天前
React Native Vector Icons 安装指南
前端·react native
前端鳄鱼崽2 天前
【react-native-inspector】全网唯一开源 react-native 点击组件跳转到编辑器
前端·react native·react.js