情景描述:

从一个名为“My”的组件点击进去,进入一个列表(该列表内容为webView中内容),其中一个webView也可以点击进入详情页(也为webView),但是如果对导航栏不做任何处理,直接点击返回按钮,便会直接从详情页跳转至最顶层页面,而返回不到该列表内容页;很显然这并非我们想要的效果,于是就需要在原有导航返回事件中增加对webView返回事件的处理,完整代码如下(由于拍的视频格式有问题,就看不了效果图了~~~桑心,只能凑合看看代码了):

export class CommonProblem extends Component {//自定义一个组件
static navigationOptions = ({ navigation }) => {
return {
headerTitle: '常见问题', //导航标题
headerTitleStyle: {
alignSelf: 'center',
textAlign: 'center',
fontSize: 16,
color: '#FFF'
},
headerLeft: (
<TouchableHighlight
activeOpacity={1}
underlayColor={skin.main}
onPress={() => {
navigation.state.params.goBackPage();
}}
>
<View style={{ paddingLeft: 20 }}>
<Icon name="ios-arrow-round-back-outline" size={30} style={{ color: '#FFF' }} />
</View>
</TouchableHighlight>
),
//导航左与导航右是为了让导航标题居中(Why?)
headerRight: <View style={{ paddingRight: 20 }} />
};
}; constructor(props) {
super(props);
this.nav = this.props.navigation;//导航
// 添加返回键监听(对Android原生返回键的处理)
this.addBackAndroidListener(this.nav);
}
componentDidMount() {
this.props.navigation.setParams({//给导航中增加监听事件
goBackPage: this._goBackPage
});
} //自定义返回事件
_goBackPage = () => {
// 官网中描述:backButtonEnabled: false,表示webView中没有返回事件,为true则表示该webView有回退事件
if (this.state.backButtonEnabled) {
this.refs['webView'].goBack();
} else {//否则返回到上一个页面
this.nav.goBack();
}
};
//获取链接
getSource() {//config.HelpProblemUrlTest是webView的地址(一个独立的H5页面)
if (!config.Release) {
return config.HelpProblemUrlTest;
}
return config.HelpProblemUrl;
} onNavigationStateChange = navState => {
this.setState({
backButtonEnabled: navState.canGoBack
});
}; // 监听原生返回键事件
addBackAndroidListener(navigator) {
if (Platform.OS === 'android') {
BackHandler.addEventListener('hardwareBackPress', this.onBackAndroid);
}
} onBackAndroid = () => {
if (this.state.backButtonEnabled) {
this.refs['webView'].goBack();
return true;
} else {
return false;
}
};
render() {
let Dimensions = require('Dimensions');
let { width, height } = Dimensions.get('window');
return (
<View style={{ backgroundColor: skin.lightSeparate, flex: 1 }}>
<WebView
source={{ uri: this.getSource() }}
style={{ flex: 10, justifyContent: 'center', alignItems: 'center', width: width }}
ref="webView"
onNavigationStateChange={this.onNavigationStateChange}
/>
</View>
);
}
}

这样就完美的达到了自己想要的问题咯。

React Native(十二)——嵌套WebView中的返回处理的更多相关文章

  1. perl5 第十二章 Perl5中的引用/指针

    第十二章 Perl5中的引用/指针 by flamephoenix 一.引用简介二.使用引用三.使用反斜线(\)操作符四.引用和数组五.多维数组六.子程序的引用  子程序模板七.数组与子程序八.文件句 ...

  2. 利用WPF建立自己的3d gis软件(非axhost方式)(十二)SDK中的导航系统

    原文:利用WPF建立自己的3d gis软件(非axhost方式)(十二)SDK中的导航系统 先下载SDK:https://pan.baidu.com/s/1M9kBS6ouUwLfrt0zV0bPew ...

  3. vue第十二单元(vue中过渡效果的实现)

    第十二单元(vue中过渡效果的实现) #课程目标 熟练掌握transition组件的用法 熟练使用transition组件做过渡特效 熟练使用transition组件做动画特效 了解使用transit ...

  4. “全栈2019”Java第五十八章:多态中方法返回类型可以是子类类型

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  5. React Native(十五)——RN中的分享功能

    终于,终于,可以总结自己使用RN时的分享功能了-- 为什么呢?且听我慢慢道来吧: 从刚开始接触React Native(2017年9月中旬)就着手于分享功能,直到自己参与公司的rn项目开发中,再到现在 ...

  6. React Native - 网页组件(WebView)的使用详解

    一.WebView组件介绍 使用 WebView 组件我们可以通过 url 来加载显示一个网页,也可以传入一段 html 代码来显示.下面对其主要属性和方法进行介绍.   1,属性介绍 source: ...

  7. React Native学习(二)之View

    React Native组件解析(二)之View 0.JSX React的核心机制之一就是虚拟DOM:可以在内存中创建的虚拟DOM元素.React利用虚拟DOM来减少对实际DOM的操作从而提升性能. ...

  8. react第十二单元(react路由-使用react-router-dom-认识相关的组件以及组件属性)

    第十二单元(react路由-使用react-router-dom-认识相关的组件以及组件属性) #课程目标 理解路由的原理及应运 理解react-router-dom以及内置的一些组件 合理应用内置组 ...

  9. React Native 系列(二) -- React入门知识

    前言 本系列是基于React Native版本号0.44.3写的,最初学习React Native的时候,完全没有接触过React和JS,本文的目的是为了给那些JS和React小白提供一个快速入门,让 ...

随机推荐

  1. App Store那些事儿

    5条建议优化手机游戏的苹果App Store截图 第一:遵守应用商店的规定 进入应用商店的每一款应用都要加上至少一张截图,并且尺寸大小必须符合应用商店的惯例. 第二:显示营销信息 既然你已经知道规定的 ...

  2. Xcode快捷键--灰常实用的快捷键,以后编程快捷多了

    从雨痕老大的博客上转来的 http://www.rainsts.net/article.asp?id=1066 读书人偷书不算窃 :)   1. 文件 CMD + N: 新文件CMD + SHIFT ...

  3. Maven自动化部署

    在项目开发中,通常是部署过程包含以下步骤 检入代码在建项目全部进入SVN或源代码库中,并标记它. 从SVN下载完整的源代码. 构建应用程序. 生成输出要么WAR或EAR文件存储到一个共同的网络位置. ...

  4. e780. 设置JList中的已选项

    List selection events are fired when the following methods are used to change the set of selected it ...

  5. MP3帧时长为26ms的来历

  6. Python中的base64模块

    本文介绍Python 2.7中的base64模块,该模块提供了基于rfc3548的Base16, 32, 64编解码的接口.官方文档,参考这里. 该模块提供两套接口,传统接口基于rfc1521的Bas ...

  7. R语言数据框小技巧

    当我们想要把数据框的行或者列按照指定的顺序排列时,可以通过行名称或者列名称快速排列 data <- data.frame(matrix(1:9, ncol=3)) rownames(data) ...

  8. Maven最佳实践-distributionManagement

    分发构件至远程仓库 mvn install 会将项目生成的构件安装到本地Maven仓库,mvn deploy 用来将项目生成的构件分发到远程Maven仓库.本地Maven仓库的构件只能供当前用户使用, ...

  9. maven中snapshot快照库和release发布库的区别和作用 (转)

    Maven介绍,包括作用.核心概念.用法.常用命令.扩展及配置 http://www.trinea.cn/android/maven/ 本文来源于铁木箱子的博客http://www.mzone.cc ...

  10. kafka_2.10-0.8.1.1.tgz的1或3节点集群的下载、安装和配置(图文详细教程)绝对干货

    运行kafka ,需要依赖 zookeeper,你可以使用已有的 zookeeper 集群或者利用 kafka自带的zookeeper. 单机模式,用的是kafka自带的zookeeper, 分布式模 ...