webview的页面跳转

在现在的安卓开发中,很多应用都内嵌了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);

}
@Override
public 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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值