如何设置 WebView 使用的 WebKit 版本...?

How do I set the WebKit version used by a WebView...?

我通过 JUCE WebBrowserComponent 在 OS X 应用程序中使用 WebKit,它是 Apple WebView Objective-C class 的轻量级包装器。 我正在 OS X 10.12 上编译,部署目标为 10.7。

我遇到的问题是在 OS X 10.8 上,WebView 使用的 WebKit 版本似乎与 Safari 使用的不同,我无法弄清楚如何选择 WebKit 版本或为什么它们不同。

运行 otool -L 在 Safari 上,给我:

otool -L /System/Library/PrivateFrameworks/Safari.framework/Versions/A/Safari | grep WebKit
    /System/Library/Frameworks/WebKit.framework/Versions/A/WebKit (compatibility version 1.0.0, current version 536.30.1)
    /System/Library/PrivateFrameworks/WebKit2.framework/Versions/A/WebKit2 (compatibility version 1.0.0, current version 536.30.1)

运行 otool -L 在 Juce 演示中给我:

otool -L JuceDemo | grep WebKit
    /System/Library/Frameworks/WebKit.framework/Versions/A/WebKit (compatibility version 1.0.0, current version 602.2.14)

首先,为什么 "current version" 数字不同,显然是相同的链接框架?

此外,如果我将相应的应用程序指向 http://browserspy.dk/webkit.php,它会为我提供适用于 Safari 的 600.8.9 的 AppleWebKit 版本和 的版本536.30.1 用于 JUCE 演示。

是什么导致了这些不同的版本号,我如何配置我的应用程序以便我的 WebView 使用 Safari 使用的“600.8.9”版本的 WebKit?

otool 版本

otool 输出的当前版本 是构建应用程序时用于link 的版本。

Safari、WebKit 和一切

在最新的 macOS 版本中,Safari 使用系统 WebKit 版本。因此带有 Safari 10 的 macOS Sierra 10.12 使用 /System/Library/Frameworks/WebKit.

Safari 还支持较旧的 macOS 版本。并且独立于系统进行更新。例如,Safari 10 在 macOS 10.10、10.11 和 10.12 上运行。现在 macOS 10.11 与 Safari 9 一起发布,但是当安装 Safari 10 时它不使用系统 WebKit。而是使用 /System/Library/StagedFrameworks/Safari 中的版本。

为什么?

新的主要 Safari 版本不仅添加了闪亮的新功能和错误,有时还会删除一些东西。一些病态的 -webkit 前缀浮现在脑海中。 WebKit 是 SDK 的一部分,它保证您的应用不会因此类更新而中断。

测试

这里是来自 WebView 和 WKWebView 的测试应用程序的版本输出:

macOS 10.8.5 (12F2560):

Safari Version 6.2.8 (8537.85.17.9.1)
WebKit Version 600.8.9

Cocoa App
WebView WebKit Version 536.30.1

macOS 10.9.5 (13F1911):

Safari Version 9.1.3 (9537.86.7.8)
WebKit Version 601.7.8

Cocoa App
WebView WebKit Version 537.78.2

macOS 10.10.5 (14F2009):

Safari Version 10.0.1 (10602.2.14.0.7)
WebKit Version 602.2.14

Cocoa App
WebView WebKit Version 600.8.9
WKWebView WebKit Version 600.8.9

macOS 10.11.6 (15G1108):

Safari Version 10.0.1 (11602.2.14.0.7)
WebKit Version 602.2.14

Cocoa App
WebView WebKit Version 601.7.8
WKWebView WebKit Version 601.7.8

回答

不支持link您的应用到 Safari WebKit 版本。

您可以包含自己的 WebKit 构建。但我认为为旧版本的部署目标编写 Web 代码更简单。