一、需求背景

如果想做webview的本地缓存或者拦截请求做其他的事情就设计到了拦截webview的请求。

二、解决方案

在Android自带的WebView中,如果需要对访问的URL或者资源进行拦截,主要涉及到WebViewClient中的三个方法:onPageStarted、shouldOverrideUrlLoading、shouldInterceptRequest。首先来分析onPageStarted方法和shouldOverrideUrlLoading方法,分别在两个方法以及onPageFinished方法中打印log

  • 当用户使用WebView的loadUrl方法开启一个网页时,其中onPageStarted方法会执行,而shouldOverrideUrlLoading则不会执行
  • 当用户继续点击网页内的链接时,onPageStarted和shouldOverrideUrlLoading均会执行,并且shouldOverrideUrlLoading要先于onPageStarted方法执行
  • 当用户点击网页中的链接后,点击back,返回历史网页时,onPageStarted会执行,而shouldOverrideUrlLoading不会执行

综上所述,当需要对访问的网页进行策略控制时,需要在onPageStarted方法中进行拦截,如下示例代码:

@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {  Log.d(TAG, "onPageStarted url is " + url);boolean res = checkUrl(url);//根据对URL的检查结果,进行不同的处理,//例如,当检查的URL不符合要求时,//可以加载本地安全页面,提示用户退出if (!res) {//停止加载原页面view.stopLoading();//加载安全页面view.loadUrl(LOCAL_SAFE_URL);}
}

然后,来分析一下shouldInterceptRequest(WebView view, String url),此方法从Android API 11(3.0)开始提供,位于WebViewClient 内,当用户使用WebView的loadUrl方法打开网页、点击网页中的链接、返回历史网页时,所有资源的加载均会调用shouldInterceptRequest方法

进行资源替换时,可以将网页资源,例如html、css、js、图片等存放在本地,在shouldInterceptRequest对WebView加载的资源进行拦截,当符合某种策略时,替换为本地的资源,资源的MIME类型可以采用以下方法获取: MimeTypeMap.getSingleton().getMimeTypeFromExtension(MimeTypeMap.getFileExtensionFromUrl(url))
示例:

@Override
public WebResourceResponse shouldInterceptRequest(WebView view, String url) {Log.d(TAG, "shouldInterceptRequest : " + url);Uri uri = Uri.parse(url);String localPath = "file://" + Environment.getExternalStorageDirectory().getAbsoluteFile() + "/www" + uri.getPath();File file = new File(localPath);try {URL localUri = new URL(localPath);if (localUri != null) {InputStream is = localUri.openConnection().getInputStream();WebResourceResponse resourceResponse = new WebResourceResponse(MimeTypeMap.getSingleton().getMimeTypeFromExtension(MimeTypeMap.getFileExtensionFromUrl(url)), "UTF-8", is);Log.d(TAG, "replace " + MimeTypeMap.getFileExtensionFromUrl(url));return resourceResponse;}} catch (IOException e) {e.printStackTrace();}return super.shouldInterceptRequest(view, url);
}

Android webview拦截请求相关推荐

  1. android webview 拦截响应,android WebView拦截请求详解

    1.WebView基本用法 WebView的基本用法相信大多数android开发者都是会使用的,最简单的就是调用个loadUrl方法,但是记得要在清单文件中添加网络权限.我也简单了写了一个加载百度的 ...

  2. android资源加载失败,解决Android WebView拦截url,视频播放加载失败的问题

    解决Android WebView拦截url,视频播放加载失败的问题 发布时间:2020-10-08 05:19:44 来源:脚本之家 阅读:86 作者:灵均子孟 需求:Android调用webVie ...

  3. android html拦截广告,Android WebView拦截iframe标签内部跳转教程

    最近项目里有个广告位需要动态配置,后台给了一段 html 嵌套iframe标签的代码,需要Android拦截iframe内部的跳转,自己做处理. 比如,下面是一段html代码,嵌套这iframe标签, ...

  4. android webview拦截加载离线文件

    概述 客户端经常会通过使用webview来用H5实现一些ios与android双端都有的功能,最常见的比如一些活动页面,内部广告页面等. 这些页面大概会有以下几个特点: 要求webview快一些,白屏 ...

  5. android 拦截h5方法,android - webview 拦截资源的几个方法和特点

    android - webview 拦截资源的几个方法和特点 2017-08-12 18:27 访问量: 2060 分类: 技术 看下面的代码,就可以看出端倪来了 onPageStarted, 触发的 ...

  6. android 拦截webview资源请求,Android Webview拦截ajax请求

    Androi基接我果控近础收们,制近础收们,制近础收d Webview虽然提供了页面加载及资源请求的钩子,但是对于h5的ajax请求并没有提供干涉的接口,这意味着我们不能在webview中干涉java ...

  7. android自带的webview有广告,android webview 拦截广告

    要想对Webview实现一些高级操作,需要使用WebViewClient,下面是关于Webview的几个常用回调函数: 1.public boolean shouldOverrideUrlLoadin ...

  8. webview拦截请求

    需求背景是有些H5上的请求需要拦截掉,直接返回失败/空. 这里留个笔记. // mWebview.setWebChromeClient(new NChromeClient());private fin ...

  9. android webview权限申请_android - 在运行时向摄像机请求WebView权限 - 堆栈内存溢出...

    我想在Android WebView的PWA中使用QR码扫描仪. PWA在chrome浏览器上可以正常工作. 我确实有在"应用程序"->"应用程序名称"- ...

  10. 从0到1实现一个Android路由(6)——拦截请求再跳转

    从0到1实现一个Android路由系列文章 从0到1实现一个Android路由(1)--初探路由 从0到1实现一个Android路由(2)--URL解析器 从0到1实现一个Android路由(3)-- ...

最新文章

  1. java opencv4.40图片实现人脸识别(2)
  2. java多态 降低代码耦合性_深度分析:理解Java中的多态机制,一篇直接帮你掌握!...
  3. 图像抠图算法学习 - Shared Sampling for Real-Time Alpha Matting
  4. 轻量级定时任务框架:APScheduler
  5. 蚂蚁动态卡片,让App首页实现敏捷更新
  6. java parseint null_java.lang.NumberFormatException: null Integer.parseInt的方法错误 具体问题代码在补充 到底怎么更改...
  7. 公众平台模板消息所在行业_微信公众号模板消息功能怎么快速推送?
  8. [POJ1463] Strategic game
  9. Docker入门之常用命令
  10. 2008年全国计算机等级考试须知及参考资料
  11. Android4.4 添加系统属性
  12. 普通网站防暴力破解的新设计
  13. 星光商务2008辉煌版 单机版 bt
  14. error: (-5:Bad argument) in function ‘seamlessClone‘ 和error: (-215:Assertion failed) 0 <= roi.x 0
  15. Java Swing中JFreeChart构建双纵轴(双Y轴)图表的使用纪要
  16. video视频标签怎么禁止用户拖动进度条快进
  17. 简易漫画网站搭建-漫画喵Server版
  18. ARM嵌入式开发板学习路线指引
  19. 《逆袭大学——传给IT学子的正能量》进展及最终目录
  20. java课后习题答案_《java课后习题答案》.doc

热门文章

  1. jxls模板hashmap_使用Java + jxls基于模板导出excel
  2. linux scp传输文件权限被拒绝,Linux的远程传输文件scp及出现Permission denied (publickey).lost connection问题解决方法-Go语言中文社区...
  3. 华硕aura完全卸载_GeForce RTX元气满满萌娘来袭 华硕天选游戏本开箱评测
  4. java 电话呼叫中心_java呼叫中心系统
  5. 【备忘】传智播客黑马程序员28期JavaEE基础及就业班视频教程
  6. Godot实用代码1000例
  7. 计算机网络-ip地址聚合后可用的地址数
  8. 单职业传奇私脱机辅助制作视频教程
  9. 区块链+电子档案解决方案
  10. 自由手写体字帖pdf_行楷钢笔字帖下载-行楷字帖电子版pdf版 - 极光下载站