设置wkwebview customUserAgent时,似乎在iOS 12中存在错误。在webView:didFinishNavigation:方法中,我打印customUserAgent并与webivew.evaluateJavaScript结果进行比较。
NSLog(@"user-agent is %@"); //Get a custom user-agent
[self.webView evaluateJavaScript:@"navigator.userAgent" completionHandler:^(id _Nullable result, NSError * _Nullable error) {
NSLog(@"user-agent is %@", result); //Get a default user-agent
}];
有人遇到同样的问题吗?
答案 0 :(得分:7)
最后,我发现问题在于您无法在调用customUserAgent的validateJavaScript:iOS 12中的method之后更改它。这是我的代码
self..webView.evaluateJavaScript("navigator.userAgent") { [weak self] (result, error) in
self?.webView.customUserAgent = result as? String + "customAgent" //not work
}
}
您可以初始化一个UIWebview或另一个WKWebiview以获得当前的用户代理,并在其后附加您的自定义用户代理。
self.tempWebView.evaluateJavaScript("navigator.userAgent") { [weak self] (result, error) in
if self == nil || error != nil {
return
}
if let userAgent = result as? String {
self?.webView.customUserAgent = userAgent + "custom agent"
}
}
答案 1 :(得分:0)
以上建议的答案似乎对我不起作用。
使用以下代码设置自定义用户代理可以在模拟器上运行,但不能在实际设备上运行,两者均运行iOS 12.0 Beta。
webView.customUserAgent = [NSString stringWithFormat:@"%@ %@", userAgent, @"custom agent"];
答案 2 :(得分:0)
答案 3 :(得分:0)
iOS 12,如果您这样调用以修改您的UA,它将无法正常工作
[self.wkWebView evaluateJavaScript:@"navigator.userAgent" completionHandler:^(NSString* _Nullable oldUA, NSError * _Nullable error) {
// modify ua
self.wkWebView.customUserAgent = @"you custom ua";
}];
一旦调用navigator.userAgent
,就永远无法对其进行修改。因此,您需要一个假的WKWebView来获取默认的UA并将其设置为真正的WKWebView
self.fakeWKWebView = [[WKWebView alloc] init];
[self.fakeWKWebView evaluateJavaScript:@"navigator.userAgent" completionHandler:^(NSString* _Nullable oldUA, NSError * _Nullable error) {
self.fakeWKWebView = nil;
// modify ua
self.wkWebView.customUserAgent = @"you custom ua";
}];
答案 4 :(得分:-1)
将此添加到AppDelegate
UserDefaults.standard.register(defaults: ["UserAgent": "custom value"])