OSX 上的 WebView 与 WKWebView

WebView vs WKWebView on OSX

Apple's documentation 建议使用 WkWebView 进行新开发,尽管它似乎有一个拼写错误,它建议 WKWebView 而不是 UIWebView mac 开发者库。

For new development, employ this class instead of the older UIWebView class.

打字错误可能是因为他们试图通过对两者使用 same header 来将 OSX 和 iOS 界面统一到 Web 视图。

但是,WKWebView 不具备 WebView 在 OSX 中的所有功能。例如,您可以在 WebView 中的本机界面中访问 DOM 节点,但我看不到 WKWebView 中的 Swift/Objective-C 中的任何方法。

就我的目的而言,似乎 WebView 是我所需要的,但我厌倦了启动一个依赖于将被删除的 API 的项目。但是,我没有在 headers 或文档中的任何地方看到任何提及弃用 WebView 的意图。

更令人困惑的是 WebKit Framework Reference 引用了 WK 和旧的 Web 视图 API,但没有澄清任何内容。

WKWebView

A WKWebView object displays interactive web content, such as for an in-app browser.

WebView

WebView is the core view class in the WebKit framework that manages interactions between the WebFrame and WebFrameView classes.

WebView 会在 OSX 后离开吗?

这不是虚惊一场。 Apple 在 6.0 中将 Safari 从 UIWebView/WebView 中移除,因此安全修复在旧的 class 中并没有那么多。仅出于这个原因,您不应该将它用于新事物。 Apple incrementally improving it 每个 OS 版本现在 do-able 具有私人扩展(file:// 访问、下载等)

也就是说,它不会完全等同于旧的 WebView。您不能再直接访问 DOM,因为 Network/Rendering/UI 进程被拆分了,您可以通过这样的元素引用来创建锁。在这两个支柱之间使用 postMessage() message handler 和 wkwebview.evaluateJavaScript() 和 callback-ish/promisy JS 代码来异步处理 web<>native 交互。

Important

Starting in iOS 8.0 and OS X 10.10, use WKWebView to add web content to your app.
Do not use UIWebView or WebView.

https://developer.apple.com/documentation/webkit/wkwebview