android怎样对webview加载的内容进行拦截修改

需求原因,看结尾。


当然有好的方法可以交流交流大笑


大家知道网页上面挂的一般都是广告联盟的广告,一般就是大家看到的一张诱惑图片加跳转。所以拦截前我们要知道我们要过滤网站的那些内容。下面以百度首页为列。




我要把百度的logo进行拦截换掉。首先我们进行抓包,得到百度logo的图片地址。https://m.baidu.com/static/index/plus/plus_logo.png


接下来就行拦截替换,下面看核心代码。

webView.setWebViewClient(
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
可以通过WebViewClient的`shouldInterceptRequest()`方法在WebView加载网页过程中拦截已经打开的图片缓存地址。具体步骤如下: 1. 在WebViewClient的`shouldInterceptRequest()`方法中判断请求是否是图片类型: ``` @Override public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) { if (request.getUrl().toString().endsWith(".jpg") || request.getUrl().toString().endsWith(".jpeg") || request.getUrl().toString().endsWith(".png") || request.getUrl().toString().endsWith(".gif")) { // 是图片类型,拦截请求 // ... } return super.shouldInterceptRequest(view, request); } ``` 2. 如果请求是图片类型,就可以从缓存中获取图片数据: ``` if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { // Android 5.0及以上版本 WebResourceResponse response = view.getWebView().getCacheMode() == WebSettings.LOAD_CACHE_ONLY ? null : view.getWebView().getCacheResponse(request); if (response != null) { // 获取缓存中的图片数据 InputStream inputStream = response.getData(); Bitmap bitmap = BitmapFactory.decodeStream(inputStream); // 处理图片 // ... // 返回缓存中的图片数据 return response; } } else { // Android 4.4及以下版本 String url = request.getUrl().toString(); File cacheFile = webView.getWebView().getCacheDir().getAbsoluteFile(); File file = new File(cacheFile, url); if (file.exists()) { // 获取缓存中的图片数据 FileInputStream inputStream = new FileInputStream(file); Bitmap bitmap = BitmapFactory.decodeStream(inputStream); // 处理图片 // ... // 返回缓存中的图片数据 return new WebResourceResponse("image/*", "", inputStream); } } ``` 需要注意的是,从缓存中获取的图片可能不是最新的,建议在需要时再通过网络获取最新的图片。另外,从缓存中获取图片数据可能会阻塞UI线程,建议在子线程中执行。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值