簡體   English   中英

使用 WKWebView 在 iOS 13 中進行桌面瀏覽?

[英]desktop browsing in iOS 13 with WKWebView?

根據 WWDC 2019 視頻 203,我應該能夠在 iPad 上的全屏 WKWebView 中看到桌面瀏覽。 但我沒有看到它。 例如,當我在 WKWebView 中搜索 go 時,我清楚地看到了該網站的移動版本。

我已經嘗試了視頻建議的所有內容。 我已經設置了applicationNameForUserAgent ,並且 web 檢查器顯示它正在按照視頻中的建議進行設置:

"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)
}

正在調用該方法。 但我仍然看到該網站的移動版本。

當我 go 到 Safari 上的同一站點 iPad,或者如果我使用 SFSafari 作為廣告視圖控制器時,我確實看到了該站點的桌面版本。 如何在我的 WKWebView 中獲取該版本的網站?

通過使用"Version/13.0.1 Safari/605.1.15"作為我的applicationNameForUserAgent字符串,我能夠讓它工作。

(我從哪里得到那個字符串?基本上我只是從 SFSafariViewController 偷來的。)

這似乎是一個錯誤。 Apple 的視頻暗示我應該為了獲得桌面瀏覽而對用戶代理是誰撒謊。

我對 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)"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM