使用 WKWebView 在 iOS 13 中进行桌面浏览?
Posted
技术标签:
【中文标题】使用 WKWebView 在 iOS 13 中进行桌面浏览?【英文标题】:desktop browsing in iOS 13 with WKWebView? 【发布时间】:2019-09-26 16:10:26 【问题描述】:根据 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 中获取该版本的网站?
【问题讨论】:
【参考方案1】:通过使用"Version/13.0.1 Safari/605.1.15"
作为我的applicationNameForUserAgent
字符串,我能够让它工作。
(我从哪里得到那个字符串?基本上我只是从 SFSafariViewController 偷来的。)
这似乎是一个错误。 Apple 的视频暗示我不应该不为了进行桌面浏览而必须谎报用户代理是谁。
【讨论】:
这救了我。关于当前状态的任何消息?意思是,这个问题解决了吗? @马特【参考方案2】:我对 iPadOS (iPad ios13) 上 WKWebView 的这个错误感到失望。
这是以编程方式获取每个版本的代码,以@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)"
【讨论】:
以上是关于使用 WKWebView 在 iOS 13 中进行桌面浏览?的主要内容,如果未能解决你的问题,请参考以下文章
iOS 13 SceneDelegate 上的 WKWebView 警报崩溃
如何在 WKWebView swift 5 中更改字体大小?
SwiftUI - WKWebView 的 iOS 13 UIViewRepresentable 获取线程 1:EXC_BREAKPOINT 崩溃