Android Webview 加载外部html时选择加载本地的js,css等资源文件

在使用WebView加载网页的时候,有一些固定的资源文件如js的jquery包,css,图片等资源会比较大,如果直接从网络加载会导致页面加载的比较慢,而且会消耗比较多的流量。所以这些文件应该放在assets里面同app打包。

要解决这个问题需要用到API 11(HONEYCOMB)提供的shouldInterceptRequest(WebView view, String url) 函数来加载本地资源。在API 21又将这个方法弃用了,是重载一个新的shouldInterceptRequest,需要的参数中将url替换成了成了request。

比如有一个图片icon.png,这个图片已经放在了assets中,现在加载了一个外部html,就需要直接把assets里面的图片拿出来加载而不需要重新从网络获取。当然可以在html里面将图片链接换成file:///android_asset/icon.png,但是这样这个html就不能在android ,ios,WAP中公用了。

实现代码:

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("icon.png")){
                        try {
                            response = new WebResourceResponse("image/png","UTF-8",getAssets().open("icon.png"));
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                }
//                return super.shouldInterceptRequest(view, url);
                return  response;
            }

            @TargetApi(Build.VERSION_CODES.LOLLIPOP)
            @Override
            public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
                WebResourceResponse response = null;
                response =  super.shouldInterceptRequest(view, request);
                if (url.contains("icon.png")){
                    try {
                        response = new WebResourceResponse("image/png","UTF-8",getAssets().open("icon.png"));
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                return response;
            }
}
时间: 2024-09-29 03:47:19

Android Webview 加载外部html时选择加载本地的js,css等资源文件的相关文章

转:Android Webview 加载外部html时选择加载本地的js,css等资源文件

原文地址:http://m.blog.csdn.net/blog/qduningning/43196819 在使用WebView加载网页的时候,有一些固定的资源文件如js的jquery包,css,图片等资源会比较大,如果直接从网络加载会导致页面加载的比较慢,而且会消耗比较多的流量.所以这些文件应该放在assets里面同app打包. 要解决这个问题需要用到API 11(HONEYCOMB)提供的shouldInterceptRequest(WebView view, String url) 函数来

Swift - 表格图片加载优化(拖动表格时不加载,停止时只加载当前页图片)

列表的单元格中包含有图片在开发中很常见.通常我们可以直接在tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath)中给单元格设置图片. 但有时这些图片要从远程加载,或者要给图片作裁减,添加滤镜等操作.如果这些操作还是直接在主线程中进行,由于上下拖动表格滚动条的时候,单元格渲染是实时进行的.那么单元格便会不断地进行图片加载,渲染,影响效率造成卡顿.如果图片大的话还会浪费流量. 下面通过一个展示“热

开发Java web时让Eclipse支持编写HTML/JS/CSS/JSP页面的自动提示

平时用eclipse开发jsp页面时智能提示效果不太理想,其实eclipse也可以像Visual Studio 2008那样完全智能提示HTML/JS/CSS代码,使用eclipse自带的插件,无需另外安装插件,具体步骤如下 1.打开eclipse→Windows→Preferences→Java→Editor→Content Assist 修改Auto Activation triggers for java的值为:zjava   点击apply按钮 如图: 2.继续打开JavaScript→

Tomcat启动时选择加载项目

到tomcat\conf\Catalina\localhost下新建文件:myapp.xml 内容如下: <Context path="/myapp" docBase="D:/myapp" reloadable="true"> </Context> 这样你就可以用.xml文件来控制要启动的应用了 可以在tomcat\conf\Catalina\localhost下再建个bak目录 把暂时不用的应用的.xml文件放到里边 因

Android onclicklistener中使用外部类变量时为什么需要final修饰【转】

Java内部类详解 说起内部类这个词,想必很多人都不陌生,但是又会觉得不熟悉.原因是平时编写代码时可能用到的场景不多,用得最多的是在有事件监听的情况下,并且即使用到也很少去总结内部类的用法.今天我们就来一探究竟.下面是本文的目录大纲: 一.内部类基础 二.深入理解内部类 三.内部类的使用场景和好处 四.常见的与内部类相关的笔试面试题 若有不正之处,请多谅解并欢迎批评指正. 请尊重作者劳动成果,转载请标明原文链接: http://www.cnblogs.com/dolphin0520/p/3811

iOS 加载本地HTML网页 js css images等文件

开发环境:Xocde Version 7.0.1 (7A1001) 模拟器SDK:Version 9.0 (SimulatorApp-620 CoreSimulator-179) 项目需求:在进入一个新的页面时,webView展示本地HTML网页,并带js交互. 需要注意:调了一下午也没跳出来,错误原因就是往工程里拖要显示的html等资源时,选错了选项. 选creat groups ,运行时会崩溃: reason: '*** -[NSURL initFileURLWithPath:]: nil

使用Maven + Jetty时,如何不锁定js css 静态资源

Jetty会使用内存映射文件来缓存静态文件,包括js,css文件. 在Windows下,使用内存映射文件会导致文件被锁定,所以当Jetty启动的时候无法在编辑器对js或者css文件进行编辑. 解决办法是更改Jetty默认配置,不适用内存映射文件来做缓存. 解决步骤如下: 1. 找到webdefault.xml, 我以6.x版本为例,jetty-6.jar在mavenrepo/org/mortbay/jetty/jetty/6.x/jetty-6.x.jar, webdefault.xml文件在包

Android WebView加载Chromium动态库的过程分析

Chromium动态库的体积比较大,有27M左右,其中程序段和数据段分别占据25.65M和1.35M.如果按照通常方式加载Chromium动态库,那么当有N个正在运行的App使用WebView时,系统需要为Chromium动态库分配的内存为(25.65 + N x 1.35)M.这是非常可观的.为此,Android使用了特殊的方式加载Chromium动态库.本文接下来就详细分析这种特殊的加载方式. 老罗的新浪微博:http://weibo.com/shengyangluo,欢迎关注! 为什么当有

手把手教你构建 Android WebView 的缓存机制 &amp; 资源预加载方案

前言 由于H5具备 开发周期短.灵活性好 的特点,所以现在 Android App大多嵌入了 Android Webview 组件进行 Hybrid 开发 但我知道你一定在烦恼 Android Webview 的性能问题,特别突出的是:加载速度慢 & 消耗流量 今天,我将针对 Android Webview 的性能问题,提出一些有效解决方案. 目录 1. Android WebView 存在什么性能问题? Android WebView 里 H5 页面加载速度慢 耗费流量 下面会详细介绍. 1.