WKWebView 您应该了解的七件事 - Jeremy Wie

2020-10-12  本文已影响0人  AndyGF

iOS 中最初有 UIWebView.

什么是 UIWebView ?

为什么 UIWebView 没有 Nitro ?

WKWebView 简介

WKWebView == WebKit

WKWebView 的优点 (与 UIWebView 相比)

image.png

如何使用 WKWebView 呢?

由 UIWebView 自动处理
1 应用商店链接
2 JS警报,确认,输入
3 在网络视图之间共享Cookie

WKWebView 相关类

  1. WKBackForwardList
  2. WKBackForwardListItem
  3. WKFrameInfo
  4. WKNavigation
  5. WKNavigationAction
  6. WKNavigationResponse
  7. WKPreferences
  8. WKProcessPool
  9. WKScriptMessage
  10. WKSecurityOrigin
  11. WKUserContentController
  12. WKUserScript
  13. WKWebViewConfiguration
  14. WKWebsiteDataRecord
  15. WKWebsiteDataStore
  16. WKWindowFeatures
  17. WKWebView

WKWebView 的 7 个让人失望之处

先把这 7 个问题列出来, 再去逐个看如何解决.

  1. 无法在iOS 8中加载 bundled 内容
  2. 无法拦截POST请求
  3. UI 状态无法保存
  4. 死亡白屏
  5. 视图出现在中途
  6. 视图只有在可见时才会渲染
  7. iOS 8中的证书损坏或自签名

如何解决这 7 个问题呢 ?
接下来一个一个来解决

1. 无法在iOS 8中加载 bundled 内容, 这对许多应用程序至关重要.

2. 无法拦截 POST 请求

发送给代理方法的 NSURLRequest 中缺少POST 正文
解决方案:现在就离开-与Android行为保持一致
好消息:WebKit 论坛表明这是一个错误,似乎有点吸引人

3. UI 状态无法保存

WKWebView 不符合状态保存 API (没有restoreIdentifier)
Astro中,它用于减少内存占用并防止崩溃
解决方案:通过保存最近的已知 URL 来构建自己的 URL

4. 死亡白屏

向后浏览时,无缘无故地看到一些 Web 视图显示空白
似乎是内存问题
我们轮询我们管理且当前不可见的每个Web视图(在视图层次结构中)

死亡白屏解决方案

5. 视图出现在中途
发生加载完成前未设置 frame 时,
必须在这一方面有创造力。
原来,重复的<head>标签被忽略了...
...所以我们在开头创建了一个<head>标签,只需向上滚动即可

视图出现在中途解决方案

6. 视图只有在可见时才会渲染

在标签栏布局中预加载标签的大问题
如果您依靠Javascript在这些Webview中运行,则会出现更大的问题
解决方案: 使用屏幕外的“holding pen”处理当前不可见的网络视图

解决方案:
  1. iOS 8中的证书损坏或自签名

WKWebView 中的错误,其中记录在案的 SSL证书自定义分析方法被破坏了
永远不会调用webView(_:didReceiveAuthenticationChallenge:completionHandler:)
内部使用很重要
没有解决方法

其他 bug

需要了解以下内容:

  1. 当应用程序在后台运行时,JS 将在约10秒内 停止执行,而本机代码(以及UIWebView中的JS)将保持运行约3分钟,直到被操作系统完全挂起。
  2. 与UIWebView不同,webView.URL属性更新为导航目标,第一个委托方法由WKWebView调用。
  3. 应用商店链接默认情况下不起作用 - 必须拦截请求

本文翻译 Jeremy Wiebe 的 <WKWebView in Production 7 things you should know about>
如果读者发现有什么不妥之处, 请帮忙指出, 感谢 !

上一篇下一篇

猜你喜欢

热点阅读