关于react native与webview通信

webview是reactnative中的组件 , 它可以创建一个原生的webview,可以用于访问一个网页.本文主要和大家介绍react native与webview通信的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望能帮助到大家。

有时候我们需要在RN与WebView之间进行通信,或者进行数据传递,或者发送消息通知.这时候就要用以下知识了.

关于react native与webview通信

一:WebView向RN端发送数据:

首先,我们构建一个webview:

 {    this.handleMessage(e)  }}  />

登录后复制

可以看到其中有一个onMessage方法,

onMessage function

在webview内部的网页中调用window.postMessage方法时可以触发此属性对应的函数,从而实现网页和RN之间的数据交换。 设置此属性的同时会在webview中注入一个postMessage的全局函数并覆盖可能已经存在的同名实现。

网页端的window.postMessage只发送一个参数data,此参数封装在RN端的event对象中,即event.nativeEvent.data。data只能是一个字符串。

由此可见,这个方法是用来接收从Webview(也就是html)中传来数据的方法.

内部实现是对接收到的数据进行处理:

handleMessage(e) {  this.setState({webViewData: e.nativeEvent.data});}

登录后复制

e.nativeEvent.data就是从webview内部发送过来的数据.

光做这个还不 够, 这只是Rn端的处理,我们还需要在html中写一个发送数据的方法:

var data = 0;function sendData(data) {  if (window.originalPostMessage) {    window.postMessage(data);  } else {    throw Error('postMessage接口还未注入');  }}document.getElementById('button').onclick = function () {  data += 100;  sendData(data);}

登录后复制

window.postMessage就是向RN发送数据.

二: RN向Webview发送数据:

首先定义一个发送数据的方法:

sendMessage() {  this.refs.webview.postMessage(++this.data);}

登录后复制

这步很简单 .
直接把想发送的数据作为参数写在这个方法里就好.

然后, 在html中也要有相应的接收数据的方法:

window.onload = function () {  document.addEventListener('message', function (e) {    document.getElementById('data').textContent = e.data;  });}

登录后复制

这就可以实现Rn与Webview之间的通信了.

之后放上源码:

nbsp;html>      

    

收到react native发送的数据: 

var data = 0; function sendData(data) { if (window.originalPostMessage) { window.postMessage(data); } else { throw Error('postMessage接口还未注入'); } } window.onload = function () { document.addEventListener('message', function (e) { document.getElementById('data').textContent = e.data; }); document.getElementById('button').onclick = function () { data += 100; sendData(data); } }

登录后复制

web.js:

/** * Created by 卓原 on 2017/8/17. * zhuoyuan93@gmail.com */import React from 'react';import {  View,  Text,  StyleSheet,  WebView} from 'react-native';export default class Web extends React.Component {  constructor(props) {    super(props);    this.state = {      webViewData: ''    }    this.data = 0;  }  sendMessage() {    this.refs.webview.postMessage(++this.data);  }  handleMessage(e) {    this.setState({webViewData: e.nativeEvent.data});  }  render() {    return (                         {              this.handleMessage(e)            }}          />                来自webview的数据 : {this.state.webViewData}         {          this.sendMessage()        }}>发送数据到WebView          )  }}const styles = StyleSheet.create({  container: {    flex: 1,    marginTop: 22,    backgroundColor: '#F5FCFF',  },});

登录后复制

相关推荐:

JS交互点击WKWebView中的图片并预览实例

关于 WebView 知识点的详解

使用WebView加载HTML代码的方法详解

以上就是关于react native与webview通信的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2787883.html

(0)
上一篇 2025年3月8日 18:18:02
下一篇 2025年3月8日 18:18:11

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • React事件绑定的几种方法分享

    本文主要给大家介绍了关于react学习之事件绑定的几种方法对比,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,希望能帮助大家更深掌握react事件绑定的方法。 React事件绑定 由于类的方法默认不会绑定thi…

    编程技术 2025年3月8日
    200
  • react router4.0以上的路由使用方法

    本文主要和大家介绍react router 4.0以上的路由应用详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望能帮助到大家。 在4.0以下的react router中,嵌套的路由可以放在一个route…

    编程技术 2025年3月8日
    200
  • 使用React进行组件库开发的实例

    最近针对日常业务需求使用react封装了一套[组件库], 大概记录下整个开发过程中的心得。由于篇幅原因,在这里只对开发过程中比较纠结的选型和打包等进行讨论,后续再对具体组件的封装进行讨论。本文主要和大家介绍使用react进行组件库开发实例,…

    2025年3月8日
    200
  • react router 4.0以上的路由如何应用

    本文主要和大家介绍react router 4.0以上的路由应用详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望能帮助到大家。 在4.0以下的react router中,嵌套的路由可以放在一个route…

    编程技术 2025年3月8日
    200
  • react前后端同构渲染实例分享

    前后端同构渲染:当客户端请求一个包含react组件页面的时候,服务端首先响应输出这个页面,客户端和服务端有了第一次交互。然后,如果加载组件的过程需要向服务端发出ajax请求等,客户端和服务端又进行了一次交互,这样,耗时相对较长。前后端同构渲…

    2025年3月8日
    200
  • React 16.3之Context API详解

    react在版本16.3-alpha里引入了新的context api,社区一片期待之声。我们先通过简单的例子,看下新的context api长啥样,然后再简单探讨下新的api的意义。 需要安装16.3-alpha版本的react。构建步骤…

    2025年3月8日
    200
  • React Native自定义组件实现抽屉菜单控件效果

    一、需求分析 原生开发中,自定义View可谓是屡见不鲜的事情,往往系统的控件总不能满足现实的需求。五花八门的产品设计需要我们做出不同的View。关于自定义View的内容网上已经有很多的博文,本篇博客要和大家分享如何在React Native…

    2025年3月8日
    200
  • React 16.3新特性分析

    context api总是很让人迷惑。这个api是官方的,但是官方又不希望开发者们使用这个api,说是这个api会在以后发生改变。现在就是那个改变的时刻。新的api已经被merge了。而且它看起来更加的“用户友好”了。尤其是你不得不使用re…

    编程技术 2025年3月8日
    200
  • 分解React组件的几种进阶方法

    react 组件魔力无穷,同时灵活性超强。我们可以在组件的设计上,玩转出很多花样。但是保证组件的single responsibility principle: 单一原则非常重要,它可以使得我们的组件更简单、更方便维护,更重要的是使得组件更…

    编程技术 2025年3月8日
    200
  • react项目案例总结

    刚刚开始写组件的时候,感觉难度不大(跟vue差不多)。最有意思的应该是jsx语法,个人感觉,jsx的功能性确实比vue的template更强,而且可读性更高. // vue 登录后复制 // jsxhello !{msg} 登录后复制 在j…

    编程技术 2025年3月8日
    200

发表回复

登录后才能评论