iis服务器助手广告
返回顶部
首页 > 资讯 > 移动开发 >Android WebView如何判定网页加载的错误
  • 391
分享到

Android WebView如何判定网页加载的错误

2024-04-02 19:04:59 391人浏览 八月长安
摘要

目录一 前言二 解决方法三 常见的错误案例分析1.错误:ERR_UNKNOWN_URL_SCHEME2.实现UC、华为浏览器处理的效果——>无视3.如何实现Chrome浏览器处

一 前言

WEBView加载网页的过程中,有时会页面加载不出来的情况,如下:

那么如何知道网页加载错误了呢?

二 解决方法


webview.webViewClient = object : WebViewClient() {
  override fun onPageFinished(view: WebView?, url: String?) {
    super.onPageFinished(view, url)
    Log.d(TAG, "onPageFinished: ")
  }

  override fun onReceivedError(
    view: WebView?,
    request: WebResourceRequest?,
    error: WebResourceError?
  ) {
    super.onReceivedError(view, request, error)
    Log.d(TAG, "onReceivedError: request= " + request.JSON())
    Log.d(TAG, "onReceivedError: error= " + error.json())
  }
}
webview.loadUrl("https://www.baidu.com/")

request输出:

{"a":{"a":"www.baidu.com/","b":true,… (linux; Android 11; sdk_gphone_x86_arm Build/RSR1.200819.001.A1; wv) AppleWebKit/537.36 (Khtml, like Gecko) Version/4.0 Chrome/83.0.4103.106 Mobile Safari/537.36","Accept":"text/html,application/xhtml+xml,application/xml;q\u003D0.9,image/webp,image/apng,/;q\u003d0.8,application/signed-exchange;v\u003db3;q\u003d0.9","Upgrade-Insecure-Requests":"1"}}}

error输出:

{"a":{"a":-1,"b":"net::ERR_CACHE_MISS"}}



public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
  if (request.isFORMainFrame()) {
    onReceivedError(view,
        error.getErrorCode(), error.getDescription().toString(),
        request.getUrl().toString());
  }
}

所以,通过以上监听,即可知道对应的错误内容,进而做相应的业务处理。

三 常见的错误案例分析

1.错误:ERR_UNKNOWN_URL_SCHEME

复现条件:打开百度新闻资讯网页,并点击评论

载体 现象
App内置WebView 报错:ERR_UNKNOWN_URL_SCHEME
UC、华为浏览器 停留在当前页面状态
Chrome浏览器 跳转到百度APP内部打开

来看一下页面加载shouldOverrideUrlLoading 中回调request输出:

{"a":{"a":"baiduboxapp://v1/easybrowse/hybrid?upgrade\u003d1\u0026type\u003dhybrid\u0026tpl_id\u003dlanding_app.html\u0026newbrowser\u003d1\u0026style\u003d%7B%22toolbaricons%22%3A%7B%22tids%22%3A%5B%224%22%2C%221%22%2C%222%22%2C%223%22%5D%2C%22menumode%22%3A%222%22%2C%22actionBarConfig%22%3A%7B%22extCase%22%3A%220%22%7D%7D%7D\u0026slog\u003d%7B%22from%22%3A%22feed%22%7D\u0026context\u003d%7B%22nid%22%3A%22news_9777178803801641010%22%7D\u0026ch_url\u003dHttps%3A%2F%2Fmbd.baidu.com%2Fnewspage%2Fdata%2FlandingReact%3FpageType%3D2%26nid%3Dnews_9777178803801641010%26uk%3D%26sourceFrom%3DlandingShare\u0026commentInfo\u003d%7B%22topic_id%22%3A1066000039731532%2C%22opentype%22%3A2%7D\u0026logargs\u003d%7B%22source%22%3A%221020283l%22%2C%22channel%22%3A%221020283m%22%7D\u0026needlog\u003d1","b":false,"c":true,"d":false,"e":"GET","f":{"Accept":"text/html,application/xhtml+xml,application/xml;q\u003d0.9,image/avif,image/webp,image/apng,/;q\u003d0.8,application/signed-exchange;v\u003db3;q\u003d0.9","Referer":"mbd.baidu.com/newspage/da…

可以发现协议不是http类开头,而是百度自己定义的"baiduboxapp"。因此,不做处理,当然是识别不了的。

2.实现UC、华为浏览器处理的效果——>无视


webview.webViewClient = object : WebViewClient() {
      override fun shouldOverrideUrlLoading(
        view: WebView?,
        request: WebResourceRequest?
      ): Boolean {
        Log.d(TAG, "shouldOverrideUrlLoading: ${request.json()}")
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
          Log.d(TAG, "shouldOverrideUrlLoading: url->${request?.url}")
          if (view != null && request?.url?.toString() != null) {
            if (request.url.toString().startsWith("http")) {
              view.loadUrl(request.url.toString())
            }
        return true
      }

3.如何实现Chrome浏览器处理的效果——>能跳转

假定这是百度适配Chrome的效果,而不是Chrome主动去适配百度的代码页面,那么说明客户端的WebView也是能做到这样效果的。

基于此,我们来urldecode一下协议内容来看看request有什么特殊:

baiduboxapp://v1/easybrowse/hybrid?upgrade=1&type=hybrid&tpl_id=landing_app.html&newbrowser=1&style={"toolbaricons":{"tids":["4","1","2","3"],"menumode":"2","actionBarConfig":{"extCase":"0"}}}&slog={"from":"feed"}&context={"nid":"news_9777178803801641010"}&ch_url=mbd.baidu.com/newspage/da…

整体来看,仍旧是符合URI规则的。这样的话就可以考虑使用Intent处理的方式了。


webview.webViewClient = object : WebViewClient() {
  override fun shouldOverrideUrlLoading(
    view: WebView?,
    request: WebResourceRequest?
  ): Boolean {
    Log.d(TAG, "shouldOverrideUrlLoading: ${request.json()}")
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
      Log.d(TAG, "shouldOverrideUrlLoading: url->${request?.url}")
      if (view != null && request?.url?.toString() != null) {
        if (request.url.toString().startsWith("http")) {
          view.loadUrl(request.url.toString())
        } else {
          try {
            Log.d(TAG, "shouldOverrideUrlLoading: 开始跳转")
            startActivity(Intent(Intent.ACTION_VIEW, request.url))
          } catch (e: Exception) {
            Log.d(TAG, "shouldOverrideUrlLoading: ${e.json()}")
          }
        }
      }
    }

    return true
  }

运行查看效果如下:

从结果来看,能跳转至百度的App,假定成立。 也就是针对非http协议地址的情况,可使用 startActivity(Intent(Intent.ACTION_VIEW, request.url)) 之类来进行协议内容处理。

四 总结

最后,根据自家业务来定协议并处理,毕竟不是谁都愿意自家用户跳出自家App的。

以上就是Android WebView如何判定网页加载的错误的详细内容,更多关于Android WebView判定网页加载的错误的资料请关注编程网其它相关文章!

--结束END--

本文标题: Android WebView如何判定网页加载的错误

本文链接: https://www.lsjlt.com/news/122771.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Android WebView如何判定网页加载的错误
    目录一 前言二 解决方法三 常见的错误案例分析1.错误:ERR_UNKNOWN_URL_SCHEME2.实现UC、华为浏览器处理的效果——>无视3.如何实现Chrome浏览器处...
    99+
    2024-04-02
  • flutter android Webview 打开网页错误ERR_CLEARTEXT_NOT_PERMITTED 、 net:ERR_CACHE_MISS
    前言:当你在Flutter应用中,使用WebView尝试打开的网页时,android环境可能会遇一些问题 问题一:提示"ERR_CLEARTEXT_NOT_PERMITTED"错误。 原因:Android 9及更高版本,默认情况下,禁止应...
    99+
    2023-09-21
    flutter android Webview
  • 【错误记录】Android WebView 报错 ( 网页无法打开 位于 http://... 的网页无法加载, 因为 net::ERR_CLEARTEXT_NOT_PERMITTED )
    文章目录 一、错误记录二、解决方案解决方案一解决方案二 一、错误记录 报错信息 : 网页无法打开 位于 http://… 的网页无法加载, 因为 net::ERR_CLEARTEXT_NOT_PERMITTED ...
    99+
    2023-08-17
    android http webview https android studio
  • 详解Android Webview加载网页时发送HTTP头信息
    详解Android Webview加载网页时发送HTTP头信息当你点击一个超链接进行跳转时,WebView会自动将当前地址作为Referer(引荐)发给服务器,因此很多服务器端程序通过是否包含referer来控制盗链,所以有些时候,直接输入...
    99+
    2023-05-31
    android webview http头信息
  • Android WebView如何实现网页的刷新
    Android WebView如何实现网页的刷新 一、引言 在Android应用开发中,我们经常需要将网页嵌入到应用中展示,这时就可以使用Android提供的WebView组件。而在展示网页的过程中,...
    99+
    2023-10-22
    android Android
  • 如何解决Android中webview旋转屏幕导致页面重新加载问题
    这篇文章给大家分享的是有关如何解决Android中webview旋转屏幕导致页面重新加载问题的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Android webview旋转屏幕导致页面重新加载问题解决办法1. 在...
    99+
    2023-05-30
    android webview
  • Android如何自定义加载圈
    本篇内容介绍了“Android如何自定义加载圈”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!<RelativeLayout ...
    99+
    2023-07-02
  • 重定向网页时,如何避免 PHP 的错误问题?
    重定向是网站开发中非常常见的操作,它可以将用户从当前页面直接跳转到另一个页面,从而实现某些功能。在 PHP 中,我们通常使用 header 函数来进行重定向操作。但是,如果不注意一些细节,就有可能出现一些错误问题。下面,我们就来探讨一下,在...
    99+
    2023-09-29
    npm leetcode 重定向
  • Android开发如何实现webview中img标签加载本地图片
    这篇文章主要介绍Android开发如何实现webview中img标签加载本地图片,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!具体如下:在网上查了很多教程,感觉很麻烦,各种方法,最后实践很简单,主要是两步:WebSe...
    99+
    2023-05-30
    android webview
  • 如何提高网页加载速度
    本篇内容主要讲解“如何提高网页加载速度”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何提高网页加载速度”吧!网页加载提速之 &ndash; 优化网页图片文件 你的网页一定有图片,加载一...
    99+
    2023-06-08
  • 如何自定义jsp中的错误页面
    这篇文章主要介绍“如何自定义jsp中的错误页面”,在日常操作中,相信很多人在如何自定义jsp中的错误页面问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何自定义jsp中的错误页面”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-03
  • Laravel如何自定义500错误页面
    这篇文章主要介绍了Laravel如何自定义500错误页面的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Laravel如何自定义500错误页面文章都会有所收获,下面我们一起来看看吧。Laravel 5.1中500...
    99+
    2023-07-04
  • 如何优化网站的页面加载速度
    优化网站页面加载速度涉及多个关键环节:1、优化图片和媒体文件、2、减少HTTP请求、3、启用缓存、4、使用CDN、5、压缩和合并CSS/JavaScript文件、6、减少服务器响应时间。优化图片和媒体文件能直接减少页面大小,进而提高加载速度...
    99+
    2023-10-29
    加载 速度 页面
  • Flutter项目webview加载没有HTTPS证书的网页在Android和iOS设备上无法显示的解决方案
    一、问题描述 Flutter项目使用谷歌官方webview库 webview_flutter,加载自签名证书、证书失效、无证书等HTTPS网页地址时,在Android或pc浏览器中提示证书失效,在iOS设备上为空白页,为了加载自签名证书的网...
    99+
    2023-09-09
    flutter https ios
  • 如何在uniapp中自定义错误页面
    随着移动互联网的蓬勃发展,手机APP已经成为了人们日常生活的必需品。为了满足用户的需求,APP开发变得越来越繁琐和复杂。像uniapp这样的跨平台开发框架,为开发者提供了更便捷的开发方式。但在使用过程中,我们不可避免地会遇到一些错误或异常情...
    99+
    2023-05-14
  • Vue页面加载完成后如何自动加载自定义函数
    目录页面加载完成后自动加载自定义函数createdmountedvue之自执行函数页面加载完成后自动加载自定义函数 created 在模板渲染成html前调用,即通常初始化某些属性值...
    99+
    2024-04-02
  • Android开发中如何自定义加载动画
    这篇文章主要为大家展示了“Android开发中如何自定义加载动画”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Android开发中如何自定义加载动画”这篇文章吧。一、demo简介效果展示如下图,...
    99+
    2023-06-29
  • ASP 网页如何利用二维码实现重定向及 load 加载?
    在现代移动互联网时代,二维码已经成为了一种极为常见的信息交换方式。它可以快速地将各种信息转化为一张图片,并且方便地被扫描和读取。而在 ASP 网页开发中,二维码同样可以发挥重要的作用。本文将介绍如何利用二维码实现 ASP 网页的重定向和 ...
    99+
    2023-07-03
    二维码 load 重定向
  • HTML5+CSS3如何实现网页加载进度条
    这篇文章将为大家详细讲解有关HTML5+CSS3如何实现网页加载进度条,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。效果图:1、html结构:<div i...
    99+
    2024-04-02
  • 如何解决网页显示javascript错误的问题
    这篇文章主要介绍如何解决网页显示javascript错误的问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!javascript是一种什么语言javascript是一种动态类型、弱类型的语言,基于对象和事件驱动并具有...
    99+
    2023-06-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作