webview的页面跳转
来源:互联网 发布:网上找活软件 编辑:程序博客网 时间:2024/05/22 06:50
在现在的安卓开发中,很多应用都内嵌了H5网页,比如淘宝,携程等app。使用混合式开发可以在不更新版本的情况下更新app内容,对企业来说也可以节约开发成本,既可以在安卓中使用,也可以在apple中使用。
WebView中有两个工具类负责管理网页各种行为:WebChromeClient和WebViewClien t,分别通过 setWebChromeClient() 和 setWebViewClient() 来实例化。WebViewClient帮助WebView处理各种通知、请求事件、记录页面加载过程的。 其中就包括URL地址,我们可以通过它来监控到地址的调用过程。
需要用到的方法有:
public boolean shouldOverrideUrlLoading(WebView view, String url) {本方法的目的是判断新网页的打开方式,当一个新的请求地址在页面发起时,由app自行决定是在浏览器打开还是继续在webview中打开系统默认是返回false,即跳转到手机浏览器中,返回true则不触发后续跳转到手机浏览器的操作,同时需要再次调用loadUrl方法,继续在webview上显示由于这个方法可以实时提供由首页发起的地址请求,即参数中的Url,我们可以对地址进行记录和修改等处理 if(url.contentEquals("http://192.168.1.100/caosin/app_flow.php?act=app_flow")){ }else{ view.loadUrl(url); } //return super.shouldOverrideUrlLoading(view, url); return true;}@Override//webview页面加载开始时就会执行此方法,一般用作重定向时的初始化工作public void onPageStarted(WebView view, String url, Bitmap favicon) {通知app页面开始加载, super.onPageStarted(view, url, favicon); mWebView.setVisibility(View.GONE); pb.setVisibility(View.VISIBLE); tv.setVisibility(View.VISIBLE);}@Overridepublic void onPageFinished(WebView view, String url) {通知app页面加载结束,该方法只能由宿主视图发起,不能保证页面图片也全部加载出来 super.onPageFinished(view, url); //loading_over.setVisibility(View.GONE); rg.setVisibility(View.VISIBLE); mWebView.setVisibility(View.VISIBLE); tv.setVisibility(View.GONE); //pb.setVisibility(View.GONE); setHideAnimation(pb,800); setShowAnimation(mWebView,600);}
触发加载网页的行为主要有两种方式:
(A)点击页面,触发<link>标签。
(B)调用WebView的loadUrl()方法。
这两种方法都会发出一条地址,区别就在于这条地址是目的地址还是重定向地址。
通过事先在shouldOverrideUrlLoading(),onPageStarted(),onPageFinished()中添加log的输出,观察输出日志来测试上诉方法的执行顺序。
1.在代码中通过loadUrl加载网页,此时的加载方式属于第二种
log如下截图
2.点击上面加载网页的链接,此时的行为是触发link标签,log如下:
通过上述范例,我们可以得出以下结论:
在A行为方式(点击页面,触发<link>标签)下:
1、如果是目的地址,那么方法的执行顺序是:
shouldOverrideUrlLoading() -> onPageStarted() -> onPageFinished()
shouldOverrideUrlLoading()由于它要提供给APP选择加载网页环境的机会,所以只要是网页上地址请求,都会获取到。
2、如果是重定向地址,在跳转到目的地址之前会进行不断的地址定位,每一次地址定位都会由以下执行顺序体现出来:
onPageStarted()->shouldOverrideUrlLoading()->onPageFinished()
我们暂且设定这种执行顺序叫:fixed position
那么一个正常的重定向地址,方法的执行顺序就是:
shouldOverrideUrlLoading()->fixed position -> … -> fixed position ->onPageStarted()->onPageFinished()
在B行为方式(调用WebView的loadUrl()方法)下:
1、 如果是目的地址,那么方法的执行顺序是:
onPageStarted() -> onPageFinished()
loadUrl()加载地址时,一般不会触发shouldOverrideUrlLoading(),一旦触发了,就说明这是一个重定向地址。
2、 如果是重定向地址,方法的执行顺序就是:
fixed position -> … -> fixed position ->onPageStarted()->onPageFinished()
- webview的页面跳转
- webview中html页面里的跳转-----返回键处理
- webview跳转页面的返回操作不成功,死循环问题
- Webview里JS跳转到Activity页面
- webview支持特效,页面内跳转
- Webview里JS跳转到Activity页面
- 点击子条目跳转详情页面webview
- ScrollView嵌套webview,webview跳转后页面不能置顶
- Webview在4.0以前的版本,html页面内跳转不能带参数的BUG
- iOS模态跳转的页面WebView中加载html调用本机相册会dismiss返回上一个页面解决办法
- WebView 跳转
- 页面跳转的问题
- flex 的页面跳转
- flex 的页面跳转
- flex的页面跳转
- ZF的页面跳转
- 页面的跳转....div
- 页面跳转的方式
- nginx的反向代理
- 表格法---大整数乘法
- hdu2084数塔
- Linux_入门之输入输出管理及vim命令应用
- MotionEvent中getX()、getRawX()等位置说明
- webview的页面跳转
- C语言编程之汉诺塔
- $.ajax打印error堆栈信息
- oracle详解(查看表数据库,用户管理,权限设置)
- linux umask使用详解
- 差错掩盖算法:(1)基于RTP的FEC前向纠错算法简介
- 判断一个单链表是否有环,若有环,求进入环中的第一个节点
- 查询BOM相关性值方法
- 线性规划2