WKWebView_tips

封装了 WKWebView,做一些记录

👉iOS 12 无法设置 UA

在其他 iOS 系统中,如果我们想设置 UA 的话,我们只需要这样做就可以了

1
2
3
[self.wkWebView.evaluateJavaScript:@"navigator.userAgent" completionHandler:^(NSString* _Nullable oldUA, NSError * _Nullable error) {
self.wkWebView.customUserAgent = newUA;
}];

可是在 iOS 12 上,这么设置,你会发现,在 js 中取 UA 还是原来的。

后来发现,只要你使用 wkWebView 调用了 navigator.userAgent,你再设置,会无法设置成功。也就是你用 A 调用了获取 UA 的 JS 方法,在设置 A 的 UA,将无法成功。所以我们在 iOS 12,需要先用一个假的 WKWebView 来获取,然后设置真正的 WKWebView 的 UA

1
2
3
4
5
self.fakeWKWebView = [[WKWebView alloc] init];
[self.fakeWKWebView evaluateJavaScript:@"navigator.userAgent" completionHandler:^(NSString* _Nullable oldUA, NSError * _Nullable error) {
self.fakeWKWebView = nil;
self.realWKWebView.customUserAgent = newUA;
}];

👉Xcode 11.2 打开 WKWebView 疯狂输出 log

在 Xcode 11.2 打开一个 WKWebView 会输出一堆log

[Process] kill() returned unexpected error 1

这是一个 WebKit 的一个 bug

👉状态栏问题

如果 WKWebView 页面会有显示或者隐藏状态栏的需求,你会发现,在一些系统上,显示或隐藏状态栏,页面会跳动,这是 scrollView 的问题,只需要这么设置即可

1
2
3
if (@available(iOS 11.0, *)) {
self.wkWebView.scrollView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
}