Webview拦截服务器资源,替换本地资源

      本周做项目时,遇到需要使用本地js,css等资源。由于项目有Android和ios版本,因此使用拦截资源地址,替换为本地资源,在这里写条博客记录下:

一、将css、js等资源存放在assets资源下,如:

Webview拦截服务器资源,替换本地资源_第1张图片

二、在webView中使用shouldInterceptRequest方法进行拦截:

webView.setWebViewClient(new WebViewClient(){
    /** 旧版本 */
    @Override
    public WebResourceResponse shouldInterceptRequest(WebView view, String url) {
        WebResourceResponse response = null;
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB){
            response = super.shouldInterceptRequest(view,url);
            if (url.contains("/app/")){
                String urlSplit = url.substring(url.lastIndexOf("/") + 1,url.length());
                try {
                    response = new WebResourceResponse("*","UTF-8",getAssets().open(urlPath));
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return  response;
    }

    /** 新版本 */
    @TargetApi(Build.VERSION_CODES.LOLLIPOP)
    @Override
    public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
        WebResourceResponse response = null;
        response =  super.shouldInterceptRequest(view, request);
        /** request.getUrl(): 获取拦截的url地址 */
        String url = String.valueOf(request.getUrl());
        /** 使用String中的contanins方法判断当前地址是否包含/app/ */
        if (url.contains("/app/")){
            /** 当包含该请求时,截取文件名 */
            String urlSplit = url.substring(url.lastIndexOf("/") + 1,url.length());
            try {
                /** 
                    使用getAssets().open()打开本地资源,其中*代表所有,其它:
                        js: mimeType = "application/x-javascript";
                        css: mimeType = "text/css";
                        html: mimeType = "text/html";
                        jpg/png:  mimeType = "image/png";
                 */
                response = new WebResourceResponse("*","UTF-8",getAssets().open(urlPath));
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return response;
    }
});

 

你可能感兴趣的:(运维自动化)