如何用WebView加载一个通过ContentProvider获取的页面?

在我的app中,我需要将一些HTML,JS,CSS文件打包放入apk中。其中使用了WebView来加载这些页面。但是这里由于内部逻辑需要,我必须拦截所有WebView加载的资源,来进行修改,将修改之后的stream传递给WebView。

于是我使用了ContentProvider机制。当使用WebView中的loadUrl方法时,传入的参数采用自定义的ContentProvider协议头作为文件的前缀。于是ContentProvider中的openAssetFile就会执行,然后我在其中进行修改,然后将修改后的流返回给WebView。这样WebView展示出来的就是ContentProvider中修改之后文件stream。

问题来了:上述逻辑在之前是运行正常的。直到最近通过GooglePlay升级了WebView版本到76+的时候,出现了问题。上述逻辑依然会执行,但是App会弹出一个选择打开其他App的请求。看起来像是,WebView无法识别这个自定义的ContentProvider协议,所以需要将此协议的文件转发给系统来处理了。

请问有人知道WebView76+版本有什么相关改动吗?非常感谢!

阅读 3.1k
1 个回答

你需要把ContentProvider的Uri对应的数据取出来转换成HTML文本,然后通过我WebView.loadData方法来加载

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题