Android WebView加载本地静态资源、字体总结
- 服务端下发H5常用的静态资源zip包,下载到本地后解压缩
- WebView加载包里的html文件,并重写WebViewClient中的
public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request)
方法,拦截请求,当拦截并匹配上url后返回WebResourceResponse,否则返回null
- H5需要加载本地的字体,可以使用file协议,比如
// H5端
@font-face {
font-family: 'xxx';
src: url('file:///android_asset/fonts/xxx.ttf');
}
Android端把字体文件放在assets/fonts文件夹下就行。
如果字体文件太大,也可以把字体文件放在sd目录中,或者服务端下发字体文件,然后前端把路径对应修改下即可,如
Android端把字体文件放在
storage/emulated/0/WebResource/fonts/xxx.ttf
前端对应修改即可
@font-face {
font-family: 'xxx';
src: url('file:///storage/emulated/0/WebResource/fonts/xxx.ttf');
}
Android端不需要做任何拦截或者其他处理,即可让WebView加载本地字体文件
遇到的问题
-
通过jsb传String遇到栈溢出错误,原因是Android端是用JsonObject转String,当数据太大时,JsonObject会抛出栈溢出错误。
解决方法: jsb直接传递Object -
前端没法调用接口
解决方法:前端通过jsb的方法告诉客户端请求接口以及请求头,
客户端调用接口并把数据返给前端 -
iOS和Android没有统一的加载本地字体方法
解决办法:前端出两个包