WebView JS与RN进行通讯

摘要:
ExportdefaultclassRN37extendsComponent{webview=null;使用注入的JavaScript方法执行带有eval postMessage=()=>}}的字符串方法//接收WebViewJS事件消息onMessage=e=>{alert(e.nativeEvent.data);}render(){return(<

RN0.37终于官方增加了WebView与React Native的通讯,之前一真使用的是第三方控件React-Native-WebView-Bridge,但不是知道怎么回事这个第三方控件喊了很长时间最终却是另一作者提交了该功能的官方版本。言归正转,由于Web的需求丰富多样所以如果不能实现WebView里的JS与RN的通讯的话,就显得特别不方便,下面代码示例如何获取当前的WebView Title,(实时Title,第一次加载的标题RN有Nativestate的方式获取,但如果Title被动态变更的话通过该办法就获取不了)。

import React, { Component } from 'react';
import {
  AppRegistry,
  StyleSheet,
  Text,
  View,
  WebView,
  Button,
} from 'react-native';

export default class RN37 extends Component {
  webview = null;
  //执行JS代码,会被转为字符串,使用injectedJavaScript方法用eval执行字符串方法
  postMessage = () => {
    if (this.webview) {
      this.webview.postMessage('window.postMessage("Title:"+document.title);');
    }
  }

  //接收WebView JS事件消息
  onMessage = e => {
    alert(e.nativeEvent.data);
  }

  render() {
    return (
      <View style={styles.container}>
        <Button enabled onPress={this.postMessage} title="Send Message to Web View" />
        <WebView
          ref={webview => { this.webview = webview; } }
          style={{
            flex: 1,
            360,
          }}
          injectedJavaScript="document.addEventListener('message', function(e) {eval(e.data);});"
          source={{uri:"https://www.baidu.com"}}
          onMessage={this.onMessage}
          />
      </View>
    );
  }
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: 'center',
    alignItems: 'center',
    backgroundColor: '#F5FCFF',
  }
});

AppRegistry.registerComponent('RN37', () => RN37);

执行效果

WebView JS与RN进行通讯第1张

免责声明:文章转载自《WebView JS与RN进行通讯》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇C# + ArcEngine 常用方法(不定时更新)使用shiro路径通配符配置访问权限下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Highcharts制作图片表设置线条颜色和粗细

Chart:图表区选项 Chart图表区选项用于设置图表区相关属性。 参数 描述 默认值 backgroundColor 设置图表区背景色 #FFFFFF borderWidth 设置图表边框宽度 0 borderRadius 设置图表边框圆角角度 5 renderTo 图表放置的容器,一般在html中放置一个DIV,获取DIV的id属...

富文本编辑器-Ueditor

    富文本编辑器,Rich Text Editor, 简称 RTE, 它提供类似于 Microsoft Word 的编辑功能,容易被不会编写 HTML 的用户并需要设置各种文本格式的用户所喜爱。它的应用也越来越广泛。最先只有 IE 浏览器支持,其它浏览器相继跟进,在功能的丰富性来说,还是 IE 强些。虽然没有一个统一的标准,但对于最基本的功能,各浏览器提...

FIREDAC操作SQLITE内存数据库

SQLite不仅可以把数据库放在硬盘上,还可以放在内存中,经测试,同样条件下数据库放在内存中比放在硬盘上插入记录速度快差不多3倍。 但数据库放在内存中时有如下缺陷: 1、断电或程序崩溃后数据库就会消失,你需要定期Attach到硬盘上备份; 2、在内存中的数据库不能被别的进程访问(因为没名字,以后可能支持),即使在多线程下,也得使用同一句柄; 3、不支持像在...

Mysql : 函数

函数 存储过程:可以返回有0个值  也可以有多个返回,适合做批量插入 批量更新 函数:有且仅有1个返回 适合做处理数据后返回一个结果 一、创建语法 CREATE FUNCTION 函数名(参数列表 )RETURNS 返回类型   BEGIN     函数体   END 注意:   1.参数列表  包含两部分:     参数名 参数类型   2.函数体:肯定...

spring-入门

1.spring是什么?   spring是一个轻量型的框架,主要体现在管理每一个Bean组件的生命周期,不同Bean组件之间依赖关系上面。   它主要是通过顶层容器BeanFactory来管理每一个Bean组件的生命周期,通过子类ApplicationContext实现工厂模式下每一个Bean组件的创建。 2.两大核心:   IOC/DI:控制反转/依赖...

python之全局变量的测试

来源:http://andylin02.iteye.com/blog/841604 结论:python的全局变量:int string, list, dic(map) 如果存在global就能够修改它的值。而不管这个global是否是存在于if中,也不管这个if是否能够执行到。   但是,如果没有 Python代码   if bGlobal:     ...