react-native <WebView>内部网页跳转并返回上一级
2017-08-03 15:10
686 查看
使用Rn的WebView控件时,遇到的网页内部跳转如何返回的问题。
点原生Back键返回;点左上角返回键返回;
上代码
import React, {Component} from 'react'; import {StyleSheet, Platform, View, WebView, BackAndroid} from 'react-native'; import * as CommonUI from 'rncommonui'; import Separator from '../../common/SeperatorLine'; var WEB_URL = 'http://www.baidu.com'; var WEB_VIEW_REF = 'webview'; export default class AboutDeveloperPage extends Component { constructor(props) { super(props); this.state = { webUrl: WEB_URL, scalesPageToFit: false, }; // 添加返回键监听 this.addBackAndroidListener(this.props.navigator); } render() { return ( <View style={{backgroundColor: '#000000', flex: 1}}> <CommonUI.NaviBar title="关于开发者" onLeft={this.state.backButtonEnabled?this.goBack:null}/> <Separator /> <WebView ref={WEB_VIEW_REF} style={styles.webView} source={{uri: this.state.webUrl}} scalesPageToFit={this.state.scalingEnabled} onNavigationStateChange={this.onNavigationStateChange}/> </View> ); } goBack = () => { this.refs[WEB_VIEW_REF].goBack(); }; // 监听返回键事件 addBackAndroidListener(navigator) { if (Platform.OS === 'android') { BackAndroid.addEventListener('hardwareBackPress', this.onBackAndroid); } } onBackAndroid = ()=> { if (this.state.backButtonEnabled) { this.refs[WEB_VIEW_REF].goBack(); return true; } else { return false; } }; onNavigationStateChange = (navState)=> { this.setState({ backButtonEnabled: navState.canGoBack, }); }; }
点原生Back键返回:
1.首先要添加backandroid监听// 监听返回键事件 addBackAndroidListener(navigator) { if (Platform.OS === 'android') { BackAndroid.addEventListener('hardwareBackPress', this.onBackAndroid); } }
用以实现自定义onBackAndroid回调方法。
onBackAndroid = ()=> { if (this.state.backButtonEnabled) { this.refs[WEB_VIEW_REF].goBack(); return true; } else { return false; } };
返回true代表不调用默认返回功能,返回false代表退出当前界面。
this.refs[WEB_VIEW_REF].goBack();//回退<WebView>控件内部跳转的页面。
返回WebView界面还是退出当前页取决于
this.state.backButtonEnabled//代表是否能回退
WebView内部跳转后状态改变时回调:
onNavigationStateChange = (navState)=> { this.setState({ backButtonEnabled: navState.canGoBack, }); };
改变this.state.backButtonEnabled状态。
点左上角返回键返回
<CommonUI.NaviBar title="关于开发者" onLeft={this.state.backButtonEnabled?this.goBack:null}/>
关键是onLeftfang方法定义,null代表点击直接返回当前页。
this.goBack方法用于WebView内部页面返回。
goBack = () => { this.refs[WEB_VIEW_REF].goBack(); };
相关文章推荐
- [Android]webview直接加载网页<允许JS,进度条,当前应用内跳转>
- react native Webview ios <Error>: CGAffineTransformInvert: singular matrix.
- react-native WebView 返回处理 (非回调方法可解决)
- 详解react-native WebView 返回处理(非回调方法可解决)
- react native与webview通信跳转页面报错:Cannot read property 'setNativeProps' of undefiend
- Android开发问题积累 <加载在线Gif><WebView无法加载网页图片>
- Android开发问题积累 <加载在线Gif><WebView无法加载网页图片>
- Android使用WebView嵌入网页,网页内点击跳转到另一个网页后,返回问题解决
- Android React-Native系列之<二>零基础学习React-Native控件之View
- <网页web工作面试题>
- ReactNative-WebView组件
- React Native多图层View,实现empty,content,error,loading等界面无缝跳转
- 【React Native开发】React Native控件之WebView组件详解以及实例使用(22)
- react native打包出现unable to process incoming event 'ProcessComplete' <ProgressCompleteEvent>
- React native webView Ios端禁止手势放大
- Android webview里加载显示网页,显示进度,点击网页链接跳转到app页面
- Web网页色谱<转>
- Android之WebView在Fragment中实现返回上一个网页
- WebView 加载网页内部video 横向全屏播放问题