使用 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)"
根据 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)"