WebView shouldOverrideUrlLoading 拦截超链接 & 自定义跳转

需求

在前端富文本编译器中,插入url,在Android端 点击链接跳转到新页面,并加载url。

分析

要是能拿到 超链接的点击事件(使其不在当前WebView中展示),然后跳转新页面就好了

是可以的!!

介绍

WebViewClient 的 shouldOverrideUrlLoading ,会在点击加载超链接时触发。

 webViewClient = (object :WebViewClient(){
      override fun shouldOverrideUrlLoading(view: WebView?, url: String?): Boolean {
          LogUtil.e("url",url)
          return super.shouldOverrideUrlLoading(view, url)
      }
  })

其两个参数含义,一目了然。

重点是返回值!
true 为拦截点击事件,表示超链接的内容不在当前 WebView 中加载。(若不做处理,则点击超链接没有任何反应,也就是点击事件被拦截)

false 就是正常的处理事件,点击超链接会在当前 WebView 加载超链接内容

解决

事情已经很明白了,返回值改为 true,拦截点击事件,并通过回调,处理跳转逻辑。

 webViewClient = (object :WebViewClient(){
      override fun shouldOverrideUrlLoading(view: WebView?, url: String?): Boolean {
          LogUtil.e("url",url)
          callBack?.toRiseClub(url)
          return true
      }
  })

防止DNS劫持,页面有广告(2019.2.21)

项目中加载了一个很久以前的系统页面,是 http 的
有的用户反应,有页面广告(运营商劫持)
对比加载的其他H5页面都没有被劫持(使用的 https ),定位到问题出在 http 请求

问题来了,页面地址改为 https 后,发现有的资源无法加载(资源地址仍为 http ),因为WebView默认模式,不允许同时加载 http 与 https 的请求。

可查看《WebView加载https和http混合,导致图片不显示问题》

WebView shouldOverrideUrlLoading 拦截超链接 & 自定义跳转_第1张图片
三种安全模式

因为需要同时加载 http 和 https ,所以我选择了 MIXED_CONTENT_ALWAYS_ALLOW

       /**
         * 加载RiseClub页面时,资源是http的,需要允许https与http同时加载,所以放开权限。
         * 但是要加上白名单功能:手动过滤
         */
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            webSettings.mixedContentMode = WebSettings.MIXED_CONTENT_ALWAYS_ALLOW
        }

因为要保证安全性,所以需要添加 白名单 功能,也就是主角 shouldOverrideUrlLoading

/**
  * 拦截所有非 jphonics 和 rtunes 的链接
  */
 override fun shouldOverrideUrlLoading(view: WebView?, url: String?): Boolean {
     url?.let {
         /**
          * 跳转到 JPHONICS & RTUNES
          */
         return !(url.contains(TASK_RISE_CLUB_JPHONICS) || url.contains(TASK_RISE_CLUB_RTUNES))
     }
     return true
 }

true 取消加载,false 是继续加载,就够了,详情如下

WebView shouldOverrideUrlLoading 拦截超链接 & 自定义跳转_第2张图片
Android SDK WebView

慎哉留真我,毋使覆尘埃...

WebView shouldOverrideUrlLoading 拦截超链接 & 自定义跳转_第3张图片
うずまき ナルト

你可能感兴趣的:(WebView shouldOverrideUrlLoading 拦截超链接 & 自定义跳转)