WKWebView问题优化指南了

如题所述

第1个回答  2022-06-08
当使用网络拦截后,WebKit的IPC进程的请求会转到主进程执行,由于进程切换回导致性能下降,所以WebKit会主动丢弃request的body。这对我们来说,是不可接受的,有想要网络拦截,还想要body。有什么办法能解决这个问题呢?这样根据不同的iOS版本分开来看。

WKWebView 限制了 WEB 页面打开三方 APP 的能力,必须在代理方法 - (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler 中拦截,判断 URL 中的 Scheme 或 host,然后通过 [[UIApplication sharedApplication] openURL:] 方法打开。

需要注意的是,对于三方APP,通过 Scheme 来判断即可,如高德地图的 scheme 是 iosamaps。但对于 iOS 部分自带 App,则需要通过 URL host 判断,如 AppStore 的 host 是 http://itunes.apple.com

据网上文章描述,有的情况用以上的两种解决方案不可行。可通过遍历 webView.subviews,是否包含 WKCompositingView 来判断白屏情况,如果是则收回旧 webView,重新创建新的 webView。但是此方法是否可行,暂未验证,目前也未采用。

转: https://zhuanlan.zhihu.com/p/58681116
相似回答