公司的项目需要承载h5页面,技术选型选择了Cordova框架。
虽然利用javascriptInterface可以调用原生能力,但是Cordova已经实现了一套成熟的机制,并且提供插件机制,快速提供原生能力。所以除了部分注入对象,都使用Cordova插件。
使用了Cordova框架,就有了一大堆Cordova的 js文件。这些js 文件一般只会因为原生能力的变动而变动,所以都是对于版本迭代来说,Cordova的js文件都是静态版本,所以可以静态保存在本地,避免页面加载过多文件;如果作为平台方,也可以避免出现业务方的Cordova资源包版本问题。
在Android上,webview 依赖WebViewClient,当有资源请求时,会调用shouldInterceptRequest这个方法,我们也是在这里做拦截。如下面两张图,只要在与前端商量好地址的规则,拦截对应规则的资源,将地址 url 转化成本地 path,生成对应WebResourceResponse就可以了,返回null则由浏览器自行处理。