使用 WKWebView 在 iOS 13 中进行桌面浏览?

desktop browsing in iOS 13 with WKWebView?

根据 WWDC 2019 视频 203,我应该能够在 iPad 上看到全屏 WKWebView 中的桌面浏览。但我没有看到它。例如,当我在我的 WKWebView 中转到 google 时,我清楚地看到了该网站的移动版本。

我已经尝试了视频中建议的所有方法。我已经设置了 applicationNameForUserAgent,网络检查器显示正在按照他们在视频中的建议进行设置:

"5.0 (Macintosh; Intel Mac OS X 10_15) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/1.0 MyBrowser/1.0"

我还实现了导航委托来请求 .desktop 模式:

func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, preferences: WKWebpagePreferences, decisionHandler: @escaping (WKNavigationActionPolicy, WKWebpagePreferences) -> Void) {
    preferences.preferredContentMode = .desktop
    print("asking for desktop version")
    decisionHandler(.allow, preferences)
}

正在调用该方法。但我仍然看到该网站的移动版本。

当我在同一个 iPad 上访问 Safari 中的同一个站点时,或者如果我使用 SFSafariViewController,我确实会看到该站点的桌面版本,如所宣传的那样。我怎样才能在我的 WKWebView 中获得该网站的版本?

我可以通过使用 "Version/13.0.1 Safari/605.1.15" 作为我的 applicationNameForUserAgent 字符串来让它工作。

(我从哪里得到那个字符串?基本上我只是从 SFSafariViewController 中偷走了它。)

这似乎是一个错误。 Apple 的视频暗示我应该 必须为了获得桌面浏览而谎报用户代理是谁。

我对 iPadOS 上 WKWebView 的这个错误感到失望 (iPad iOS13)。

这是以编程方式获取每个版本的代码,以@matt 指示的格式生成字符串,并将其添加到用户代理。

let systemVersion = UIDevice.current.systemVersion
let webkitVersion = (Bundle(for: SFSafariViewController.self).object(forInfoDictionaryKey: "CFBundleVersion") as? String) ?? "605.1.5"
webConfig.applicationNameForUserAgent = "Version/\(systemVersion) Safari/\(webkitVersion)"