Android中WebView使用LoadUrl不刷新网页的问题,网址带#只能通过reload刷新(android webview oom)()

花匠人从多个角度为你分享Android中WebView使用LoadUrl不刷新网页的问题,网址带#只能通过reload刷新(android webview oom)(),让你更加了解Android中WebView使用LoadUrl不刷新网页的问题,网址带#只能通过reload刷新(android webview oom)(),包含生活百科相关的生活技巧、生活小窍门、生活小妙招等生活百科知识。

  本篇文章为你整理了Android中WebView使用LoadUrl不刷新网页的问题,网址带#只能通过reload刷新(android webview oom)()的详细内容,包含有Android中WebView使用LoadUrl不刷新网页的问题,网址带#只能通过reload刷新(android webview oom) 等,让你从多个方面了解Android中WebView使用LoadUrl不刷新网页的问题,网址带#只能通过reload刷新(android webview oom)(),希望对你有帮助。

   文章目录 项目场景:问题描述原因分析结论参考材料 可以直接快进到结论部分 项目场景: 最近在和其他公司沟通联调H5的时候,意外发现对方发过来的地址可以加载,但是没有办法正常刷新。

  


问题描述 写了个一个X5内核的demo,然后在WebViewClient的所有方法加上日志来监控对方网页的运行情况。 此处测试网址为https://www.baidu.com/#/aaaaaaaaaaaaaaaaaaaa,是我随便写的。

 

  对网页第一次加载可以正常加载(即调用了onPageStarted和onPagefinished)。

  

I/MyWebView: shouldInterceptRequest: https://www.baidu.com/#/aaaaaaaaaaaaaaaaaaaaI/MyWebView: onProgressChanged: 10I/MyWebView: shouldOverrideUrlLoading: url:https://www.baidu.com/#/aaaaaaaaaaaaaaaaaaaaI/MyWebView: onPageStarted: url:https://www.baidu.com/#/aaaaaaaaaaaaaaaaaaaa, favicon :null............省略中间无关日志.........I/MyWebView: onPageFinished: url:https://www.baidu.com/#I/MyWebView: onProgressChanged: 70I/MyWebView: onProgressChanged: 100
第二次调用loadUrl()加载的时候只会刷新图标,不会真的重新加载网页(只调用onPageFinished)。

 

  

I/MyWebView: onProgressChanged: 10I/MyWebView: doUpdateVisitedHistory: url:https://www.baidu.com/#/aaaaaaaaaaaaaaaaaaaa, isReload:falseI/MyWebView: onPageFinished: url:https://www.baidu.com/#/aaaaaaaaaaaaaaaaaaaaI/MyWebView: onProgressChanged: 100I/MyWebView: shouldOverrideUrlLoading: url:https://sm.bdimg.com/static/wiseindex/img/favicon64.ico
最后意外发现当我们第二次加载对方的网页的时候,如果调用的是webView.loadUrl(url),就无法刷新,但是如果调用的是webView.reload(),就可以正常刷新对方的网页。

 

  调用relaod时日志如下:

  

I/MyWebView: onProgressChanged: 10I/MyWebView: shouldInterceptRequest: url:https://www.baidu.com/#I/MyWebView: shouldOverrideUrlLoading: url:https://www.baidu.com/#I/MyWebView: onPageStarted: url:https://www.baidu.com/#, favicon :android.graphics.Bitmap@a1689fcI/MyWebView: onProgressChanged: 23............省略中间无关日志.........I/MyWebView: onProgressChanged: 100I/MyWebView: onPageFinished: url:https://www.baidu.com/#
原因分析 知道了调用reload可以重刷网页,调用loadUrl无法重刷网页,问题就在于这两个方法的差别了。

 

  经过一阵百度,得知了真正原因是因为对方的URL带了#,所以导致loadUrl不会刷新网页。

  将网址改为https://www.baidu.com/aaaaaaaaaaaaaaaaaaaa,再次调用loadUrl,第二次加载日志如下:

  注:由于该网页并不存在,所以报404了,我们只是通过日志观察网页是否有重新加载而已。

  

I/MyWebView: shouldInterceptRequest: url:https://www.baidu.com/aaaaaaaaaaaaaaaaaaaaI/MyWebView: onProgressChanged: 10I/MyWebView: onReceivedHttpError: request https://www.baidu.com/aaaaaaaaaaaaaaaaaaaa error: 404I/MyWebView: onPageStarted: url:https://www.baidu.com/aaaaaaaaaaaaaaaaaaaa, favicon :android.graphics.Bitmap@1d36963I/MyWebView: onProgressChanged: 70I/MyWebView: onProgressChanged: 100I/MyWebView: onProgressChanged: 100I/MyWebView: onPageFinished: url:https://www.baidu.com/aaaaaaaaaaaaaaaaaaaa
可以看到有正常执行onPageStarted和onPageFinished

 

  那么为什么URL里面带了个#,我们的WebView就无法通过loadUrl刷新网页了呢?

  简单来说,URL中#以及其后面的部分,是客户端这边的位置定位符,在加载网页的时候并不会真正的发送给服务端。 其证明就是:我们的两个测试网址都是实际不存在的,但是带#的网址可以正常的加载出百度的首页,而没有带#的网址就直接报404了。 我们在用https://www.baidu.com/#/aaaaaaaaaaaaaaaaaaaa加载网页的时候,实际上发出的请求还是https://www.baidu.com/

  当#后的内容修改的时候,也不会重新刷新页面,只是会修改网页内部的位置。

  我们的测试网址由于带有#,所以无论怎么调用loadUrl,他都判断我们只是改变了网页内部的相对位置(虽然实际上我们并没有改变),不会重新加载这个网页,只是加载网页图标。

  那为什么webViewreload又可以重刷网页呢,实际上是因为loadUrl默认会有缓存策略,而reload是无视缓存策略强制刷新的,所以我们拿这个地址去浏览器运行,是可以正常刷新的。

   结论 url中#以及后面的部分只是用于客户端定位,不会发给服务端loadUrl会有缓存策略,遇到带#的网页不会刷新,reload无视缓存策略会强制刷新。 参考材料 URL中#号的含义 - wanghetao - 博客园 https://www.cnblogs.com/wanghetao/p/3830467.html 关于安卓webview的loadUrl和reload方法缓存策略的区别发现记录_小源子2016的博客-CSDN博客 https://blog.csdn.net/rnZuoZuo/article/details/52327436?locationNum=11 webview第二次加载带#的url 调用loadUrl()不会刷新的坑__陈泡泡的博客-CSDN博客_webview loadurl数据不刷新 https://blog.csdn.net/weixin_42863849/article/details/122846830

  

  以上就是Android中WebView使用LoadUrl不刷新网页的问题,网址带#只能通过reload刷新(android webview oom)()的全部内容,想要了解更多Android中WebView使用LoadUrl不刷新网页的问题,网址带#只能通过reload刷新(android webview oom)()相关的内容,请持续关注我们。

以上就是花匠人为你整理的Android中WebView使用LoadUrl不刷新网页的问题,网址带#只能通过reload刷新(android webview oom)(),如果你还想了解更多生活百科知识,请持续关注花匠人。

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

相关文章阅读

  • spring事务失效的一些场景(spring事务失效的几种常见情况)()
  • 沙参有什么功效与作用(猪心炖沙参有什么功效)()
  • 佳木斯外地人小孩上学条件要求(农民工子女就近入学政策)()
  • 秋冬女生怎么穿衣搭配(秋冬季女生穿搭)(秋冬季女生服装搭配)
  • 高考志愿填报表格图片,高考志愿表怎么填图片()
  • 湖北自考网官网入口,湖北自考网官方网站(湖北自考官方下载)
  • 重庆医药高等专科学校怎么样,重庆医药高等专科学校是职高吗()
  • 关于海淀区小学排名的信息()
  • 形容难过的AABB式成语哭(形容难过的aabb四字词语)()
  • 小孩无理取闹的哭怎么教育?(孩子无理取闹大哭时怎么做)
  • 辽宁省教育厅,辽宁省教育厅电话(辽宁省教育厅电话号)
  • 孩子因为胖而自卑怎么办?(孩子因为肥胖不自信怎么办)
  • 高考男生选什么专业吃香男生学什么专业比较有前途()
  • 二本医学院,二本医学院研究生值得读吗(普通二本医学院研究生读出来有用吗)
  • 多滤镜效果视频怎么做?剪映制作多滤镜视频效果的方法()
  • 中班小朋友厌学怎么办?(幼儿园中班厌学情绪严重)
  • 上海中心大厦阻尼器怎么吊上去的(上海中心大厦阻尼器怎么运上去的)()
  • 浙江外地人小孩上学条件要求(农民工子女就近入学政策)()
  • 全免学费的职校,全免学费的职校杭州有哪些(杭州私立大专 免试入学)
  • 青春期孩子失恋了家长应该怎么办?()
  • 留言与评论(共有 条评论)
       
    验证码: