上面一篇文章介绍的HTTP请求拦截方式有问题,经过进一步的研究(查看官方文档+百度谷歌+各种测试验证),终于找到一种比较好的实现方式,下面来跟大家做一个详细的介绍:
第一步,在
webRequest.onBeforeRequest的监听器中拦截请求,加载本地资源,具体判断流程如下图:
请求拦截判断流程
参考实现代码如下:
请求拦截实现代码
重定向自定义协议地址
第二步,自定义协议,这里自定义协议scheme为zlzc,首先将一个scheme zlzc注册为标准scheme, 将保证相对和绝对资源在使用时能够得到正确的解析。 然后注册一个scheme为 zlzc 协议, 将 Buffer作为响应发送
注册自定义协议为标准scheme
注册一个scheme为 zlzc 协议, 将 Buffer作为响应发送
第三步,拦截自定义zlzc buffer协议, 并将 handler作为该protocol新的处理方式,handler中读取本地文件内容,即返回一个Buffer对象数据,注意要指定mimeType。
读取本地文件内容,返回buffer对象数据
其中判断是否属于缓存资源代码如下:通过判断请求资源文件的后缀名确定,缓存html文件在加载时候会问题,故这里先注释了,后续有空再研究。
通过后缀名判断是否为缓存资源