您的位置:首页 > 移动开发

React Native Webview使用

2017-05-12 18:16 411 查看
RN为我们提供了WebView组件来加载一个网页。

/**
* Created by gyg on 2017/5/4.
*/
'use strict'
import React, {Component} from 'react';
import {
StyleSheet,
View,
Text,
WebView,
BackAndroid,
} from 'react-native';

class WebLoadingView extends Component {

render() {
return (
<View style={{flex:1,justifyContent:'center',
alignItems:'center',backgroundColor:'#f2f2f2'}}>
<Text style={styles.loadingText}>
页面正在加载...
</Text>
</View>
)
}
}

export default class WebViewScene extends Component {

// 构造
constructor(props) {
super(props);
// 初始状态
this.state = {
url: "",
title: "",
loading: true,
isBackButtonEnable: false,
isForwardButtonEnable: false
};
}

componentDidMount() {
BackAndroid.addEventListener("webHardwareBackPress", ()=> {
try {
if (this.state.isBackButtonEnable) {
this.refs._webView.goBack();//返回上一个页面
return true;//true 系统不再处理 false交给系统处理
}
} catch (error) {
return false;
}
return false;
})
}

componentWillUnmount() {
BackAndroid.removeEventListener("webHardwareBackPress");
}

render() {
return (
<View style={styles.container}>
<WebView
style={styles.webView}
ref="_webView"
source={{uri:this.props.route.extras.url}}//获取url参数
automaticallyAdjustContentInsets={true}
domStorageEnabled={true}
javaScriptEnabled={true}
scalesPageToFit={true}
startInLoadingState={true}
renderLoading={()=>{return <WebLoadingView/>}}
onNavigationStateChange={this._onNavigationStateChange.bind(this)}
/>
</View>
)
}

//WebView导航状态改变
_onNavigationStateChange(navState) {
this.setState({
url: navState.url,
title: navState.title,
loading: navState.loading,
isBackButtonEnable: navState.canGoBack,
isForwardButtonEnable: navState.canGoForward,
})
}
}

const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: "#f2f2f2",
},
webview: {
flex: 1,
},
loadingText: {
color: '#8a8a8a',
fontSize: 16
}
})


source {uri: string, method: string, headers: object, body: string}, {html: string, baseUrl: string} 加载url,加载静态html

javaScriptEnabled bool android 是否启用支持js

automaticallyAdjustContentInsets bool 设置是否自动调整内容

domStorageEnabled bool 适合Android平台 该只适合于Android平台,用于控制是否开启DOM Storage(存储)

scalesPageToFit bool 适合iOS平台 用于设置网页是否缩放自适应到整个屏幕视图以及用户是否可以改变缩放页面

onError function 网页加载失败时调用

onLoad function 方法 当网页加载结束的时候调用

onLoadEnd function 网页加载结束时(无论成功或失败)调用

onLoadStart function 网页加载开始时调用

onNavigationStateChange function 当导航状态发生变化时回调

renderError function 渲染视图错误时使用

renderLoading function 该函数功能是返回一个加载指示器

startInLoadingState bool 强制webview在第一次加载时是否显示加载视图

userAgent string android 设置userAgent

allowsInlineMediaPlayback bool 该适合iOS平台,设置决定当使用HTML5播放视频的时候在当前页面位置还是使用原生的全屏播放器播放,默认值false。【注意】.为了让视频在原网页位置进行播放,不光要设置该属性为true,还必须要设置HTML页面中video节点的包含webkit-playsinline属性

bounces bool 该适合iOS平台 设置是否有界面反弹特性

onShouldStartLoadWithRequest function 该适合iOS平台,该允许拦截WebView加载的URL地址,进行自定义处理。该方法通过返回true或者falase来决定是否继续加载该拦截到请求

scrollEnabled bool 该适合iOS平台 用于设置是否开启页面滚动

跳转到展示网页页面:

this.props.navigator.push({
component: WebViewScene,
extras: {
url: 'https://www.jd.com',//网页url
}
})




源码
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  react-native webview