WebView shouldOverrideUrlLoading 不触发原因

转载 2013年10月17日 14:58:26

WebView shouldOverrideUrlLoading and redirect问题 

2012-11-23 11:36:46|  分类: Android |  标签: |字号 订阅

问题:客户端界面中打开安卓市场某款产品的下载界面。点击下载按钮后,并不走客户端写在shouldOverrideUrlLoading中的处理逻辑。导致该包不能下载。

ps:安卓市场下载按钮是通过js跳转的。


原来,android平台下,在ApiLevel小于11的情况下,webview的shouldOverrideUrlLoading并不是每次都会调用。

所以需要添加平台适配。或者将放在shouldOverrideUrlLoading中的逻辑放在onPageStarted方法中去处理。


Androids WebView class provides a method called shouldOverrideUrlLoading to intercept the loading of the requested URLs.
This gives us the ability to suppress loading of the given URL or handle a URL in the external browser for example.

If you want to prevent the webview from loading the URL you have to return true. Otherwise the url is forwarded to the webview as usual.

  1. _webView.setWebViewClient(new WebViewClient() { 
  2.   @Override 
  3.   public boolean shouldOverrideUrlLoading(WebView view, String url) { 
  4.     boolean shouldOverride = false
  5.     if (url.startsWith("https://")) { //NON-NLS 
  6.       // DO SOMETHING 
  7.       shouldOverride = true
  8.     } 
  9.     return shouldOverride; 
  10.   } 

This mechanism works fine for all URLs triggered by a user tapping on a link.

Unfortunately this method does not get invoked if the URLs source is a redirect on devices running Android < 3.0 (API Level 10 and lower).
Although it will be invoked an works just fine on devices with Android >= 3.0 (API Level 11 and up).

Android < 3.0 -> shouldOverrideUrlLoading will not be called on redirects

Android >= 3.0 -> shouldOverrideUrlLoading will be called even on redirects

You can find some fellow developers facing the same issue.

As a Workaround we use the recommended onPageStarted(WebView view, String url, Bitmap favicon)

Usage is quite the same as shouldOverrideUrlLoading:

  1. _webView.setWebViewClient(new WebViewClient() { 
  2.   @Override 
  3.   public void onPageStarted(WebView view, String url, Bitmap favicon){ 
  4.     if (url.startsWith("https://")) { //NON-NLS 
  5.       view.stopLoading(); 
  6.       // DO SOMETHING 
  7.     } 
  8.   } 
  9. }  

With view.stopLoading the webview will stop loading of the new URL and still show the current content. This equals the behavior of shouldOverrideUrlLoading returning true.

The advantage is it works on all Android versions.

However the drawback is onPageStarted is invoked AFTER the page was requested form server. That means, the request is already sent to the server even if the response is afterward ignored.

The method shouldOverrideUrlLoading would let you omit the request BEFORE it is sent. So you would be able to save the outgoing web request.

使用WebView时的一些坑(图片拼接、不显示、shouldOverrideUrlLoading正确用法)

开始学习WebView时感觉很简单,就是拿到控件后给他个URL就OK啦,但是在项目中真正用的时候,会有各种问题。问题1:如果URL的内容是一个个图片拼接的,会出现图片折叠的现象 原因:没有对WebV...
  • hello_1s
  • hello_1s
  • 2016年10月25日 15:16
  • 1266

WebView 重定向行为导致的多次加载问题

使用 WebView 时,我们通常会重写以下方法: shouldOverrideUrlLoading() onPageStarted() onPageFinished()WebView ...
  • nifanggge
  • nifanggge
  • 2017年05月30日 23:15
  • 2126

WebView shouldOverrideUrlLoading 方法使用不当导致 服务端获取父url 失败

前言 最近在使用webview 开发web app 的时候,出现了一个奇怪的问题 就是,就是后台获取不到 url 的父级url 。 经过一番百度 发现其他人也遇到过这种问题(这个帖子现在 我已经找...
  • hu285279904
  • hu285279904
  • 2016年08月11日 14:58
  • 1466

在WebView自身打开链接 -- 关于WebViewClient类shouldOverrideUrlLoading的错误用法

我所参与的一个小项目有个需求就是使用 WebView 加载一个论坛,那么论坛页面上的链接跳转就需要限制在WebView中,而不是使用默认的浏览器应用打开;而默认情况下,Android 系统会启动一个应...
  • zhangyihui1986
  • zhangyihui1986
  • 2014年12月26日 12:34
  • 13674

使用WebView时的一些坑(图片拼接、不显示、shouldOverrideUrlLoading正确用法)

开始学习WebView时感觉很简单,就是拿到控件后给他个URL就OK啦,但是在项目中真正用的时候,会有各种问题。问题1:如果URL的内容是一个个图片拼接的,会出现图片折叠的现象 原因:没有对WebV...
  • hello_1s
  • hello_1s
  • 2016年10月25日 15:16
  • 1266

WebView shouldOverrideUrlLoading 方法使用不当导致 服务端获取父url 失败

前言 最近在使用webview 开发web app 的时候,出现了一个奇怪的问题 就是,就是后台获取不到 url 的父级url 。 经过一番百度 发现其他人也遇到过这种问题(这个帖子现在 我已经找...
  • hu285279904
  • hu285279904
  • 2016年08月11日 14:58
  • 1466

android webview 二次验证流程分析 shouldOverrideUrlLoading深度分析

一. shouldOverrideUrlLoading的含义  Sdk中的解释 public boolean shouldOverrideUrlLoading (WebView view, Str...
  • a0407240134
  • a0407240134
  • 2016年05月23日 15:34
  • 5041

webview 调用第三方浏览器的原因及解决办法

今天在用webView load腾讯的OAuth页面http://open.t.qq.com/cgi-bin/authorize 时,突然弹出选择uc还是互联网浏览器的确认框,很奇怪,其他页面都...
  • u011223674
  • u011223674
  • 2014年05月19日 21:09
  • 1324

【Android进阶】Android里webview不支持input file的解决方法(上传按钮点击失效的原因)

三星、华为等android里webview不支持input file的解决方法 原文地址:http://camnpr.com/archives/1093.html 由于安全因素android web...
  • dodod2012
  • dodod2012
  • 2016年03月09日 14:10
  • 7024

关于Android 中webView 中定位失败的原因

最近做项目调用H5页面,而会页面中有打卡上班的功能,所以要定位..然后当我一切准备就绪当我测试的时候问题出现了,没错,定位失败,,而Ios正常,无意间测试发现后台给我的链接 我用微信打开也是正常的,用...
  • u011011744
  • u011011744
  • 2017年06月08日 15:15
  • 883
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:WebView shouldOverrideUrlLoading 不触发原因
举报原因:
原因补充:

(最多只允许输入30个字)