首页 > 解决方案 > WKWebView 未加载 WhatsApp Web

问题描述

我有一个使用 SwiftUI 和 WebKitView 制作的 macOS 网络浏览器,它适用于大多数网站,但某些页面(例如 WhatsApp )我收到以下错误消息以升级到更新版本的 safari。

在此处输入图像描述

网络视图

struct WebView: NSViewRepresentable {
    @ObservedObject var webModel: WebStateModel
    
    let wkWebview = WKWebView()
    
    func makeNSView(context: Context) -> WKWebView {
        if let theUrl = webModel.url {
            let request = URLRequest(url: theUrl, cachePolicy: .returnCacheDataElseLoad)
            wkWebview.load(request)
        }
        
        let preferences = WKPreferences()
        preferences.javaScriptEnabled = true
        
        return wkWebview
    }
    
    func updateNSView(_ nsView: WKWebView, context: Context) {
        if let theUrl = webModel.url {
            let request = URLRequest(url: theUrl, cachePolicy: .returnCacheDataElseLoad)
            nsView.load(request)
        }
    }

标签: swiftswiftuisafariwebkitwhatsapp

解决方案


首先,您可以使用Safari 服务而不是 WKWebView,因此您实际上将使用兼容的浏览器。

否则,这取决于站点如何检查它加载的浏览器。

  • 检查浏览器类型和版本的最原始方法是查看浏览器的用户代理字符串。对于这种情况,您可以通过将WKWebView上的 customUserAgent 设置为站点支持的任何内容来超越检查。不过,这是一个 hack,因为您的 WKWebView 假装是不同的浏览器。

  • 更复杂的案例检查的不是实际的浏览器,而是他们需要的功能。例如,该站点可能会检查是否启用了 cookie 或本地存储。在这种情况下,您应该只在 WKWebView 上启用所需的功能。

  • 在第三种情况下,站点尝试显式阻止将其内容嵌入 WKWebView 或 WebView。在这种情况下,您必须尊重网站所有者的意愿,而不是尝试嵌入网站。

WhatsApp的情况是哪一个,不太确定。我猜你将不得不进行实验。


推荐阅读