react-native WebView 返回处理 (非回调方法可解决)
2018-02-23 10:59
555 查看
1.前言
项目中有些页面内容是变更比较频繁的,这些页面我们会考虑用网页来解决。
在RN项目中提供一个公用的Web页,如果是网页内容,就跳转到这个界面展示。
此时会有一个问题是,网页会有一级页面,二级页面,这就会设计到导航栏返回键的处理(以及在Android上返回键的处理)。
这个问题,在RN官网就可找到解决方式。就是用onNavigationStateChange这个回调方法记录当前的导航状态,从而判断是返回上一级页面还是退出这个网页,回到App的其他界面。
但是,当网页的实现是React时,就会有问题了,你会发现,当页面跳转的时候,onNavigationStateChange这个回调方法没有回调!!!怎么肥四!!
一开始尝试了把网页地址换成百度的,可以接收回调,一切都运行的很好,可是换成我们的链接就不行,所以就把锅甩给了后台,以为是React哪边写的不对。
因为上一个项目时间紧,没有时间好好去看一下源码,就想了一个不是很完善的解决方案,就是网页用js来回调App来告知现在的导航状态,这样的解决方式显示是不友好的。
现在稍微有点时间看了源码才知道真正原因。
2.原因
下面就分析一下这个问题的原因和我的解决方式。
1.首先,先找到源码的位置。
node_modules\react-native\ReactAndroid\src\main\java\com\facebook\react\views\webview
node_modules\react-native\Libraries\Components\WebView
目录结构是这样的:
View Code
至此就完成自定义WebView模块。也可以解决网页是React实现,不能导航的问题。
不善排版,看不懂的可留言
项目中有些页面内容是变更比较频繁的,这些页面我们会考虑用网页来解决。
在RN项目中提供一个公用的Web页,如果是网页内容,就跳转到这个界面展示。
此时会有一个问题是,网页会有一级页面,二级页面,这就会设计到导航栏返回键的处理(以及在Android上返回键的处理)。
这个问题,在RN官网就可找到解决方式。就是用onNavigationStateChange这个回调方法记录当前的导航状态,从而判断是返回上一级页面还是退出这个网页,回到App的其他界面。
但是,当网页的实现是React时,就会有问题了,你会发现,当页面跳转的时候,onNavigationStateChange这个回调方法没有回调!!!怎么肥四!!
一开始尝试了把网页地址换成百度的,可以接收回调,一切都运行的很好,可是换成我们的链接就不行,所以就把锅甩给了后台,以为是React哪边写的不对。
因为上一个项目时间紧,没有时间好好去看一下源码,就想了一个不是很完善的解决方案,就是网页用js来回调App来告知现在的导航状态,这样的解决方式显示是不友好的。
现在稍微有点时间看了源码才知道真正原因。
2.原因
下面就分析一下这个问题的原因和我的解决方式。
1.首先,先找到源码的位置。
node_modules\react-native\ReactAndroid\src\main\java\com\facebook\react\views\webview
node_modules\react-native\Libraries\Components\WebView
目录结构是这样的:
/** * Copyright (c) 2015-present, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. * * @providesModule CustomWebView //此处需要修改名称 */ var RCT_WEBVIEW_REF = 'webview1'; //此处需要修改名称 render() { var webView = <NativeWebView onLoadingStart={this.onLoadingStart} onLoadingFinish={this.onLoadingFinish} onLoadingError={this.onLoadingError} onChange={this.onChange} //添加方法 />; return ( <View style={styles.container}> {webView} {otherView} </View> ); } onChange = (event) => { //添加方法 this.updateNavigationState(event); }; } var RCTWebView = requireNativeComponent('RCTWebView1', CustomWebView, CustomWebView.extraNativeComponentConfig); //修改名称 module.exports = CustomWebView; //修改名称
View Code
至此就完成自定义WebView模块。也可以解决网页是React实现,不能导航的问题。
不善排版,看不懂的可留言
相关文章推荐
- 详解react-native WebView 返回处理(非回调方法可解决)
- 《React-Native系列》42、键盘遮挡问题官方处理方法KeyboardAvoidingView
- 关于Android原生集成5+webview,监听webview返回时,执行两次onkey方法问题的解决
- 关于WebView.goBack()在有的网页无法返回的问题的解决方法
- webview与js交互,window.close()回调方法onCloseWindow()无效的解决方法
- WKWebView 获取标题+进度条+常用代理方法以及native兼容处理
- 解决 react native 的 webview 组件不支持android客户端上传图片文件问题
- react-native <WebView>内部网页跳转并返回上一级
- 用HttpWebRequest做POST请求时返回Http 417 错误解决方法
- android webview loadData乱码问题解决方法
- textview 中处理spannable使得ListView的点击事件失效的解决方法
- 安卓:Webview不弹出输入法的解决方法
- WebViewClient+WebChromeClient(回调方法)
- WebView addJavascriptInterface接口中的隐忧解决方法
- Win8 WebView控件去除白框我的解决方法
- ios开发之webView.scalesPageToFit = YES后 加载页面遇见表格显示很小的解决方法
- webview 中textarea设置斜体字体失效的解决方法
- android webview内容压线问题解决方法
- Webview网页中文本框不弹出输入法 没有得到焦点解决方法
- android文本组件textView属性autolink设置为web,显示网址的处理方法