iOS Webview 离线加载调研与实践
原文中文,约4500字,阅读约需11分钟。
📝
内容提要
Webview在客户端的运用场景越来越多,离线加载能节省网络加载耗时,提高用户体验。iOS端使用WKURLSchemeHandler来实现离线加载,通过hook方法和创建自定义的WKURLSchemeHandler类来完成。需要注意的问题有:任务溢出问题、Blob上传溢出问题、Blob上传内容丢失问题、Cookie同步问题。在实践中需要使用私有API和注入JS脚本,存在一定的风险性。
❓
Q&A
iOS中如何实现Webview的离线加载?
可以通过WKURLSchemeHandler来实现离线加载,使用hook方法和创建自定义的WKURLSchemeHandler类。
WKURLSchemeHandler与NSURLProtocol相比有什么优势?
WKURLSchemeHandler相较于NSURLProtocol更为安全,避免了Post请求丢失body的问题。
在使用WKURLSchemeHandler时需要注意哪些问题?
需要注意任务溢出、Blob上传溢出、Blob上传内容丢失和Cookie同步等问题。
如何处理Blob上传时的数据丢失问题?
可以通过注入JS脚本来处理Blob对象,或将Blob数据base64后放到请求头中。
WKWebView的cookies是如何管理的?
WKWebView的cookies由WKHTTPCookieStore管理,而客户端请求的cookies由NSHTTPCookieStorage管理。
在iOS中实现Webview请求拦截存在哪些风险?
实现过程中需使用hook、私有API等,存在一定风险,需做好监控和验证。
🏷️