swift - 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)
}
}
解决方案
首先,您可以使用Safari 服务而不是 WKWebView,因此您实际上将使用兼容的浏览器。
否则,这取决于站点如何检查它加载的浏览器。
检查浏览器类型和版本的最原始方法是查看浏览器的用户代理字符串。对于这种情况,您可以通过将WKWebView上的 customUserAgent 设置为站点支持的任何内容来超越检查。不过,这是一个 hack,因为您的 WKWebView 假装是不同的浏览器。
更复杂的案例检查的不是实际的浏览器,而是他们需要的功能。例如,该站点可能会检查是否启用了 cookie 或本地存储。在这种情况下,您应该只在 WKWebView 上启用所需的功能。
在第三种情况下,站点尝试显式阻止将其内容嵌入 WKWebView 或 WebView。在这种情况下,您必须尊重网站所有者的意愿,而不是尝试嵌入网站。
WhatsApp的情况是哪一个,不太确定。我猜你将不得不进行实验。
推荐阅读
- flutter - Build Runner 未在项目文件夹中运行
- sql - MS Access VBA 使用 SQL 和 Schema.ini 将 csv 导入新表 - 强制表的列名
- sql - 每组最多 3 个值
- java - 寻找使用动态 Hitbox 和图形创建对象的方法
- java - MongoClient 是抽象的,无法实例化
- java - JDBC CallableStatement - 一次调用多个存储过程
- alloy - 我应该在合金“子模块”中有痕迹吗
- javascript - 在输入变化时更新 Vue 减法方法
- c# - 如何以一定速度将精灵的速度设置为与鼠标指针相反的方向?
- javascript - 用 Enzyme/Jest 模拟 Click Test 不调用 Sinon Spy