WebView拦截线上资源,加载离线资源

在项目开发中,通过Charles分析发现Webview加载网页时存在大体积js和css资源,影响加载速度和用户体验。本文介绍了如何在客户端通过WebView拦截线上资源,转而加载本地离线资源,提升Webview的加载效率。重点讲解了拦截资源的步骤,包括获取需要拦截的资源、设置WebViewClient进行拦截,并强调了注意事项,如正确设置mimeType和与前端约定资源文件名。
摘要由CSDN通过智能技术生成

一、前言

最近的项目开发中接入了一些网页功能,Webview加载完成大约需要10秒左右,经过使用Charles抓包分析,发现在加载过程中出现了几个比较大的js和css文件,这些文件在没有压缩之前有15M左右,发布线上压缩有也有3M左右,这些资源严重影响了webview的加载速度,同时也带来了不好的体验。在极致情况下,web端应该去做这些优化处理,但在项目赶时间的情况下,客户端在做了这些大文件资源做了离线处理,让webview加载这些的时候从本地加载。

二、Webview拦截资源

2.1获取需要拦截的资源

//本地缓存路径,一般都放在assets目录中
private static final String PATH_WEB_RESOURCE = "www";
private List<String> offlineResource;

//获取需要的缓存文件
private List<String> fetchOfflineResource(Context context) {
    AssetManager assetManager = context.getAssets();
    try {
        String[] res = assetManager.list(PATH_WEB_RESOURCE);
        if (res != null) {
            return Arrays.asList(res);
        }
    } catch (Exception ex) {
        ex.printStackTrace();
    }
    return null;
}

2.2拦截处理

安卓中的WebView可以通过拦截资源请求来实现资源的替换。主要的步骤如下: 首先,我们需要继承自WebViewClient类并重写shouldInterceptRequest方法。该方法在加载资源请求时会被调用,我们可以在此进行资源拦截和替换。 在shouldInterceptRequest方法中,我们可以通过WebView的loadUrl方法加载我们自定义的资源。例如,我们可以通过读取本地的资源文件,然后使用loadUrl方法加载这些资源。这样,WebView就会加载我们替换的资源而不是原始的网络资源。 另外,需要注意的是,为了确保替换的资源能够正确加载,我们还需要在WebView中启用JavaScript,可以通过调用setJavaScriptEnabled方法来实现。 接下来,我们需要创建一个新的WebView,并设置我们自定义的WebViewClient。然后,通过调用setWebViewClient方法将自定义的WebViewClient设置给WebView。 最后,我们可以通过调用WebView的loadUrl方法加载需要显示的网页,同时WebViewClient中的shouldInterceptRequest方法会被回调,实现资源拦截和替换。 总结起来,安卓的WebView可以通过拦截资源请求并替换资源来实现对网页的定制化。我们可以通过继承WebViewClient类,并重写shouldInterceptRequest方法,在其中加载我们自定义的资源,从而实现资源的替换。同时,要注意在WebView中启用JavaScript,以确保替换的资源能够正确加载
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值