Android webView 网址重定向影响goBack()

泡在网上的日子 / 文 发表于2015-07-23 17:36 第次阅读 webView

原文:http://spencer-dev.com/blog/2015/android-webview-wang-zhi-zhong-ding-xiang-ying-xiang-goback.html/ 

android自带的控件 webView的时候, 访问某网址, 网址会通过某些方式进行重定向. 这时会出现一个问题.

如下所示:

你想要在 『A网址』 中打开 『C网址』, 但实际上打开『C网址』的时候, 是需要通过 『B网址』来中转的.

就出现了下面这种情况:

A网址 -> B网址(重定向到C) -> C网址

好,现在再来说一下我们在使用webView的时候一些习惯.

如果说我们不想让用户在webView中点击连接后,让用户打开系统的浏览器进行浏览, 而是继续使用我们的webView进行浏览的话.

我们一般的操作是:

webView.setWebViewClient(new WebViewClient(){
        @Override
	public boolean shouldOverrideUrlLoading(WebView view, String url) {
            // 控制新的连接在当前WebView中打开
            webView.loadUrl(url);
            return true;
        }
});

通过上面的方法,让我们的浏览器能够继续访问网页中的链接. 但是上面的方式,碰到需要后退的需求,就出现了问题.

我们假设这时候, 用户需要从『C网址』返回到『A网址』, 用户自己本身不知道中间有『B网址』, 的存在, 用户只是希望能够在我点击goBack的时候, 能够回到『A网址』

但是看上面结构式是: A网址 -> B网址(重定向到C) -> C网址.

这样可以判断出, 直接调用了 webView.goBack() 一定会返回到『B网址』, 但是『B网址』网址的功能又是重定向到『C网址』, 所以用户看到一个现象就是, 不能goBack了, 每次点击goBack, 就又回到『C网址』.

那上面这个问题怎么解决呢?

通过修改,我们上面override的方法.

webView.setWebViewClient(new WebViewClient(){
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            return false; // doc上的注释为: True if the host application wants to handle the key event itself, otherwise return false(如果程序需要处理,那就返回true,如果不处理,那就返回false)
            // 我们这个地方返回false, 并不处理它,把它交给webView自己处理.
        }
});



收藏 赞 (2) 踩 (27)
上一篇:Android 中 imageView 的 Src 和 Background
原文来自给力乐的技术博客 http://spencer-dev.com/blog/2015/androidzhong-imageviewde-srche-background.html/ imageView有两个显示图片的属性,作用分别是什么呢? src background 如果两个属性同时存在,用户会看到 src 属性中设置的背景. 但同时 backgroun
下一篇:RecyclerView的拖动和滑动 第二部分 :拖块,Grid以及自定义动画
在 第一部分 ,我们介绍了 ItemTouchHelper ,以及 ItemTouchHelper.Callback 的实现,在线性列表(RecyclerView)中添加基本的拖拽拖放与滑动删除。本文将在前文例子的基础上扩展,增加对grid布局的支持,处理拖拽的始化,提示被选中的view,同时自定义滑动