android rn 和webview,RN Webview与Web的通信与调试

React Native Version:0.51

RN 在 0.37 版本中加入了WebView功能,所以想要在使用WebView,版本必须>=0.37,发送的 message 只能是字符串,所以需要将其他格式的数据转换成字符串,在接收到后再转换回去,其实直接用JSON.stringify和JSON.parse就可以

加载 html

source属性用于指定加载的 html,可以加载在线的页面,也可以加载本地的页面,代码如下:

// 加载线上页面

source={{uri: 'http://www.mi.com'}}

/>

// 加载本地html文件

source={require('../src/html/index.html')}

/>

注意 ⚠️

在 RN 中可以加载 WebView,但是无法调试,也不能使用 alert 来验证代码 js 代码是否运行成功,只能通过往 html 写入东西(innerHTML)来验证 js 是否运行成功

WebView 与 html 的通信

webview 发送信息到 html

WebView 给 html 发送信息需要使用postMessage,而 html 接收 RN 发过来的信息需要监听message事件,代码如下:

// RN

class WebViewExample extends Component {

onLoadEnd = () => {

this.refs.webview.postMessage = 'this is RN msg'

}

render() {

return (

ref="webview"

source={require('../html/index.html')}

onLoadEnd={this.onLoadEnd}

/>

)

}

}

export default WebViewExample

// web

window.document.addEventListener('message', function(e) {

const message = e.data

})

这里需要注意一点

postMessage需要在 webview 加载完成之后再去 post,如果放在commponentWillMount里由于页面没有加载完成就 post 信息,会导致 html 端无法监听到 message 事件。

html 发送信息到 webview

// RN

class WebViewExample extends Component {

handleMessage = e => {

const message = e.nativeEvent.data

}

render() {

return (

ref="webview"

source={require('../html/index.html')}

onMessage={e => this.handleMessage(e)}

/>

)

}

}

export default WebViewExample

// web

window.postMessage('this is html msg')

debug

RN 中 debug webview 和安卓开发中看起来是差不多的,连接好设备后,在 chrome 中输入

chrome://inspect

就可以看到安卓设备上正在运行的 webview 了,点击inspect就会开启一个调试页面,就可以进行 debug 了,RN 似乎默认开启了 debug 调试,直接就可以看到 webview 中输出的信息。

abc62e13c12d

webview_debug.png

但是我发现我打开的调试界面是一个错乱的界面,不知道为什么,无奈。

abc62e13c12d

debug界面.jpeg

注意 ⚠️

这里需要注意一点的,由于安卓版本的差异,所以内部的 webview 对 js 的支持程度也不同,为了保证兼容性,如果使用了 ES6,请转成 ES5,否则会报错。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/539852.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据库完整性检查

为了主动发现数据库侧页损坏,保证数据库逻辑和物理完整性,计划每周六上午6点,针对生产主库上的所有系统和用户数据库执行DBCC CHECKDB,将结果记录到表中。以下为理论依据:SQL Server数据库可以检测出页损坏&#xff0c…

GNU概念

一、GNU的意思 GNU的全称:GNU is not unix,意思是:GNU 不是 unix 问:为什么这样取名? 答:为了打造一个不是unix又类unix的系统 二、GNU的历程 GNU计划是由Richard Stallman 在1984年公开发起的&#x…

Item 13 Minimize the accessibility of classes and members

区分好的模块和不好的模块最重要的因素是看这个模块对于其他模块而言是否隐藏内部数据和其他细节。好的模块会把所有细节隐藏起来,把API和实现隔离开来,模块之间用API通信。这就是information hiding或者封装(encapsulation)。是软件设计基本原则之一。 …

html 物流状态,使用css实现物流进度的样式的实例代码

效果:css样式:ul li {list-style: none;}.package-status {padding: 18px 0 0 0}.package-status .status-list {margin: 0;padding: 0;margin-top: -5px;padding-left: 8px;list-style: none;}.package-status .status-list>li {border-left: 2px so…

GPL概念

一、GPL概念 全称为 General Public License,翻译为通用公共许可,是最著名的开源许可协议。Linux内核就是在GPL许可下发布的,GPL许可是由自由软件基金会Free Software foundation 创建的,由Richard Stallman 和一帮人共同努力发起…

点钞机语音怎么打开_原来微信语音一样能转发? 居然还有人不知道

微信怎么把语音转发给别人?原来这个简单啊,微信作为一款我们最常用的社交工具,无论是生活还是工作过程中,我们都能够用到微信。那么大家知道微信怎么把语音转发给别人吗?有的人肯定就会回答说:"跟转发…

圆与平面的接触面积_视频:5.3RJ六年级上册圆的面积例题+习题讲解

一、什么是面积物体表面的大小就是它们的面积。长方形的面积长宽正方形的面积边长边长平行四边形的面积底高三角形的面积底高2梯形的面积(上底下底)高2圆所占平面的大小叫做圆的面积。二、剪切法推导圆的面积把圆转化成近似的长方形,当平均分成的份数越来越多&#…

Reactjs 踏坑指南1: 一些概念

Reactjs 踏坑指南1: 知识点 什么是React虚拟DOMJSX组件生命周期和状态事件单项数据流Reactjs和Angularjs的对比React简介 React是一个Facebook开发的UI库。使用这个库可以很方便的开发交互式的、具有表达力的和可重用的UI组件。本身并不是一个框架,可视为…

Linux为什么受欢迎?

1、Linux以高效和灵活著称,实现了几乎全部的Unix特性,同时具备多任务,多用户的能力,支持多线程,多CPU架构。 2、Linux操作系统软件包:包含了文本编辑器,高级语言编译器,以及X-Windo…

直播的学习与使用-----采集

// 捕获音视频 - (void)setupCaputureVideo { // 1.创建捕获会话,必须要强引用,否则会被释放 AVCaptureSession *captureSession [[AVCaptureSession alloc] init]; _captureSession captureSession; // 2.获取摄像头设备,默认是后置摄像头 AVCaptureD…

html css js编程顺序,html css js先学哪个呢?

前端开发三剑客为 HTML、CSS、JavaScript。这三门语言的掌握对前端开发程序员来说是必须的,但有不少同学不懂得先学习哪一门语言。那么这篇文章 w3cschool 小编就来为你解答一下 HTML、CSS、JavaScript 先学哪个的问题。首先需要学习的是 HTML,HTML 是开…

苹果手机收不到推送信息_iPhone手机收不到正式版系统更新推送怎么办?(附解决方法)...

有不少热衷于升级系统的小伙伴,希望在第一时间升级到最新版 iOS 系统进行体验,但难免也会遇到无法收到更新推送的问题。主要有以下原因。iPhone手机收不到正式版系统更新推送怎么办?网络状况不佳如果当前网络状况不好,可能无法收到来自苹果官…

Linux系统特点介绍集合

1、开源代码程序,可自由修改。 2、Unix系统兼容,具备Unix几乎所有优秀特性,同Unix指令集。 3、可自由传播,无任何商业版权制约。 4、适合Intel等x86 CPU系列架构的计算机。 5、一个完善的多用户,多任务&#xff0c…

火狐 移动 html 元素,python中的Firefox+Selenium:如何交互式地获取元素html?

Im使用PythonSeleniumSplinterFirefox创建一个交互式web爬虫。在python脚本提供了选项,然后Selenium打开Firefox并发送一些命令。在现在,我需要让python脚本知道用户想要与之交互的web元素。在我目前使用的方法是:Right-click the item in th…

瘦子的肠道菌群和胖子的区别_瘦子和病态肥胖患者肠道菌群组成和潜在功能的显著差异...

10.1111/joim.1313707-07, ArticleAbstract & Authors:展开Abstract:收起Introduction:The gut microbiome may contribute to the development of obesity. So far, the extent of microbiome variation in people with obesity has not been determined in large cohorts…

Centos下载地址

下载地址: 从阿里镜像网站上下载 http://mirrors.aliyun.com/centos/ 建议选用Centos 6.x windows电脑配置:至少4G内存,i5处理器或以上。 Linux虚拟机分配:内存128M~1024M,cpu 1核心,硬盘8g即可。

html分块时边距的设置,html – 文本节点后第一个块的边距(垂直空间)?

我不确定你是否会认为这是对你的问题的完整答案,因为我知道你正在使用< td>在您的示例中,< td>之间存在一个差异.和< dd>或者< li>元素是< td>的事实.在不破坏< table>的情况下,元素不能与其周围元素相抵消具体行为.但至少我可以回答你的第…

实现连麦_微信重磅更新,视频号直播连麦打赏美颜上线,新增巨大流量入口

12月23日晚&#xff0c;微信迎来重大改版&#xff01;在最新7.0.20版本的微信中&#xff0c;视频号大招不断&#xff0c;不仅上线了连麦功能&#xff0c;支持美颜瘦脸、打赏等功能。此外&#xff0c;微信还给视频号开放了两个重大入口&#xff0c;包括微信个人名片和“发现”ta…

VMware Workstation 网络设置解释三种

一、NAT Network Address Translation&#xff0c;网络地址转换&#xff0c;NAT模式是比较简单的实现虚拟机上网的方式&#xff0c;NAT模式的虚拟机时通过物理电脑上网和交换数据的。 在NAT模式下&#xff0c;虚拟机的网卡连接到物理机的VMware上&#xff0c;此时VMware软件的…