ReactNative: 使用网页组件WebView组件
一、简介
在移动端开发中,很多时候需要嵌入一个网页来帮助实现某一个活动,这方式大大提高了活动快速迭代的灵活性,在RN中,同样也这么处理这种情况的。其实,这种混合式开发称为Hybird APP,它们就是基于WebView来实现的。React-Native中的WebView组件提供的功能基本满足需求,现在就让我们来研究一下。
二、属性
//HTML字符串。已过期,官方推荐使用source代替
hml:PropTypes.string //URL字符串。已过期,官方推荐使用source代替
url:PropTypes.string //网页资源,拥有下面三个值
source
1、PropTypes.shape({
uri: PropTypes.string,
method: PropTypes.string,
headers: PropTypes.object,
body: PropTypes.string,
}),
2、PropTypes.shape({
html: PropTypes.string,
baseUrl: PropTypes.string,
}),
3、PropTypes.number //是否支持回弹效果
bounces: PropTypes.bool //滚动速率, normal: 0.998, fast: 0.99 (the default for iOS web view)
decelerationRate: ScrollView.propTypes.decelerationRate //是否支持滚动
scrollEnabled: PropTypes.bool //表示是否自动调整内部内容
automaticallyAdjustContentInsets: PropTypes.bool //内部内容偏移
contentInset: EdgeInsetsPropType //是否开启页面加载的状态
startInLoadingState: PropTypes.bool //是否支持JavaScript交互
javaScriptEnabled: PropTypes.bool //注入的JavaScript代码
injectedJavaScript: PropTypes.string //是否按照页面比例和内容高度比例自动缩放内容
scalesPageToFit: PropTypes.bool //是否支持网页内部音视频播放
allowsInlineMediaPlayback: PropTypes.bool
三、函数
//渲染失败
renderError: PropTypes.func //渲染中
renderLoading: PropTypes.func //即将对资源发送请求
onShouldStartLoadWithRequest: PropTypes.func //网页资源开始加载
onLoadStart: PropTypes.func //网页资源加载中
onLoad: PropTypes.func //网页资源加载结束
onLoadEnd: PropTypes.func //网页资源加载失败
onError: PropTypes.func //监听导航状态变化,可以在该函数中完成OAuth认证
onNavigationStateChange: PropTypes.func //收到H5的消息
onMessage: PropTypes.func //给H5发送消息
injectJavaScript: PropTypes.func
三、使用
myWebView.js
import React, { Component } from 'react';
import {
StyleSheet,
View,
WebView,
Dimensions
} from 'react-native';
const {width, height} = Dimensions.get('window');
export default class MyWebView extends Component{
render() {
return (
<View style={styles.flex}>
<WebView
refs="webview"
style={styles.web}
source={{uri: "https://www.baidu.com"}}
automaticallyAdjustContentInsets={true}
scalesPageToFit={true}
startInLoadingState={true}
bounces={false}
javaScriptEnabled={true}
injectedJavaScript = {`alert('I AM XYQ');`}
onLoadStart={() => {
console.log("--onLoadStart--")
}}
onLoad={() => {
console.log("--onLoad--")
}}
onLoadEnd={() => {
console.log("--onLoadEnd--")
}}
onError={() => {
console.log("--onError--")
}}
/>
</View>
)
}
}
const styles = StyleSheet.create({
flex: {
flex: 1
},
web: {
height: height,
width: width
}
});
-- ::36.436 [info][tid:com.facebook.react.JavaScript] --onLoadStart--
-- ::37.722 [info][tid:com.facebook.react.JavaScript] --onLoad--
-- ::37.723 [info][tid:com.facebook.react.JavaScript] --onLoadEnd--
>>>> frameSizeChanged =
-- ::38.679 [info][tid:com.facebook.react.JavaScript] --onLoad--
-- ::38.683 [info][tid:com.facebook.react.JavaScript] --onLoadEnd--

ReactNative: 使用网页组件WebView组件的更多相关文章
- ReactNative WebView组件详解
在开发Android的时候,一般我们会有一些加载网页的需求,或者执行一些JavaScript,我们都知道在Android中实现这个功能的控件是WebView,在ReactNative中也有实现此类需求 ...
- React Native之网页组件WebView的使用与通信
在实际开发中,我们通常会嵌入一些html页面,官方为我们提供了一个非常好用的网页组件WebView,通过这个组件我们可以通过传入一个url或者是传入一段html 一. WebView的基本属性方法介绍 ...
- Android WebView组件 访问部分网页崩溃问题【已解决】
最近刚接触Android,在测试WebView组件时发现总是出现崩溃现像: 提示:ERR_CLEARTEXT_NOT_PERMITTED 当时以为是权限问题,查找自己的AndroidManifest文 ...
- Webview组件和HTML的介绍
Deviceone平台并不是基于html5的跨平台开发工具.我们开发一个app都是使用原生的组件,但是在某些场景下html5也是非常好的选择,比如复杂的图文混排(类似新闻),比如报表chart之类用h ...
- Android 4.2版本以下使用WebView组件addJavascriptInterface方法存在JS漏洞
JS注入漏洞存在的Android版本:Android < 4.2 综述:Android的SDK中提供了一个WebView组件,用于在应用中嵌入一个浏览器来进行网页浏览.WebView组件中的ad ...
- 小程序web-view组件
不久前微信小程序发布了web-view组件,这个消息在各个圈里引起不小的涟漪.近期正好在做小程序的项目,便研究了一下这个让大家充满期待的组件. 1,web-view这个组件是什么鬼? 官网的介绍: ...
- [转]小程序web-view组件
本文转自:https://www.cnblogs.com/-nothing-/p/7910355.html 1,web-view这个组件是什么鬼? 官网的介绍:web-view 组件是一个可以用来承载 ...
- 安卓开发笔记——WebView组件
我们专业方向本是JAVA Web,这学期突然来了个手机App开发的课设,对于安卓这块,之前自学过一段时间,有些东西太久没用已经淡忘了 准备随笔记录些复习笔记,也当做温故知新吧~ 1.什么是WebVie ...
- 微信小程序中的 web-view 组件
web-view 是一个可以承载 web 网页的容器,当 WXML 文件中存在 web-view 组件时,其他组件会自动全部失效,而且 web-view 承载的组件会自动铺满小程序的整个页面.其他组件 ...
随机推荐
- 【Flask系列】开发一个简单的Flask程序
知识点 初始化:每一个flask程序都必须创建一个程序实例,遵循WSGI(Web Server Gateway interface)协议,把请求->flask Obj; 创建实例: app = ...
- Android 子线程更新UI 异常
众所周知,Android是不可以在子线程中直接更新UI的,需要借助Handler或者View.post(Runnable runnable)或者runOnUIThread(Runnable runna ...
- python中字典数据类型常用操作
创建字典 字典是另一种可变容器模型,且可存储任意类型对象. 字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中 ,格式如下所示: ...
- wdCP v3.3.8apache阿里云ssl证书实现智慧软文http转换https的详细操作教程
先展示一下效果:智慧软文发布系统(https://www.zhihuiruanwen.com) 之前用的是传统的http,发现360浏览器,火狐浏览器,谷歌浏览器均提示不安全的链接,最主要的是第一次打 ...
- su和sudo的区别与使用
一. 使用 su 命令临时切换用户身份 1.su 的适用条件和威力 su命令就是切换用户的工具,怎么理解呢?比如我们以普通用户beinan登录的,但要添加用户任务,执行useradd ,beina ...
- 使用Spring Data JPA的Specification构建数据库查询
Spring Data JPA最为优秀的特性就是可以通过自定义方法名称生成查询来轻松创建查询SQL.Spring Data JPA提供了一个Repository编程模型,最简单的方式就是通过扩展Jpa ...
- 小白学 Python 爬虫(15):urllib 基础使用(五)
人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...
- POJ 3660 cow contest (Folyed 求传递闭包)
N (1 ≤ N ≤ 100) cows, conveniently numbered 1..N, are participating in a programming contest. As we ...
- 原生js 复制内容到剪切板
代码: function copyHandle(content){ let copy = (e)=>{ e.preventDefault() e.clipboardData.setData('t ...
- margin重叠与穿透问题
margin重叠是指两个同级元素之间.margin穿透指的是,子元素margin超出父元素而未被父元素包含的现象. 出现margin重叠的原因: 同一个BFC里面两个块级元素会出现margin折叠. ...