iOS Webview 离线加载调研与实践

💡 原文中文,约4500字,阅读约需11分钟。
📝

内容提要

Webview在客户端的运用场景越来越多,离线加载能节省网络加载耗时,提高用户体验。iOS端使用WKURLSchemeHandler来实现离线加载,通过hook方法和创建自定义的WKURLSchemeHandler类来完成。需要注意的问题有:任务溢出问题、Blob上传溢出问题、Blob上传内容丢失问题、Cookie同步问题。在实践中需要使用私有API和注入JS脚本,存在一定的风险性。

🎯

关键要点

  • Webview在客户端的运用场景越来越多,离线加载能节省网络加载耗时,提高用户体验。
  • iOS端使用WKURLSchemeHandler实现离线加载,相较于NSURLProtocol更为安全。
  • WKURLSchemeHandler是iOS11后提供的接口,支持加载自定义协议资源。
  • 需要hook WKWebView的handlesURLScheme方法以支持http或https请求的数据处理。
  • 在实现过程中需注意任务溢出、Blob上传溢出、Blob上传内容丢失和Cookie同步等问题。
  • Blob上传时可能会导致数据丢失,需要通过注入JS脚本来处理Blob对象。
  • WKWebView的cookies由WKHTTPCookieStore管理,而客户端请求的cookies由NSHTTPCookieStorage管理,可能导致cookie同步问题。
  • 在实现Webview请求拦截时需使用hook、私有API等,存在一定风险,需做好监控和验证。
➡️

继续阅读