更新:
从iOS 9.0开始,可以直接设置用户代理(如其他答案所述)。但是需要注意的是,设置后将完全覆盖默认的用户代理。如果您只需要添加自定义用户代理,请使用以下方法之一。
webView.evaluateJavaScript("navigator.userAgent") { [weak webView] (result, error) in
if let webView = webView, let userAgent = result as? String {
webView.customUserAgent = userAgent + "/Custom Agent"
}
}
或者通过使用牺牲性的UIWebView
webView.customUserAgent = (UIWebView().stringByEvaluatingJavaScript(from: "navigator.userAgent") ?? "") + "/Custom agent"
旧答案:
如我的评论中所述,您可以使用与此处描述的相同方法: Change User Agent in UIWebView (iPhone SDK)
现在,如果您想获取用户代理,则需要拥有 WKWebView 的实例并在其上评估此 JavaScript:
如果您想获取用户代理,您可以按照这篇文章中提到的方法来改变UIWebView的用户代理。
要获取用户代理,您需要创建一个WKWebView实例并在其上运行以下JavaScript代码:
navigator.userAgent
问题在于,如果在WKWebView实例化后设置自定义用户代理,则始终会获取相同的用户代理。要解决此问题,您必须重新实例化Web视图。以下是可能的示例:
self.wkWebView = [[WKWebView alloc] initWithFrame:self.view.bounds];
__weak typeof(self) weakSelf = self;
[self.wkWebView evaluateJavaScript:@"navigator.userAgent" completionHandler:^(id result, NSError *error) {
__strong typeof(weakSelf) strongSelf = weakSelf;
NSString *userAgent = result;
NSString *newUserAgent = [userAgent stringByAppendingString:@" Appended Custom User Agent"];
NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:newUserAgent, @"UserAgent", nil];
[[NSUserDefaults standardUserDefaults] registerDefaults:dictionary];
strongSelf.wkWebView = [[WKWebView alloc] initWithFrame:strongSelf.view.bounds];
[strongSelf.wkWebView evaluateJavaScript:@"navigator.userAgent" completionHandler:^(id result, NSError *error) {
NSLog(@"%@", result);
}];
}];
以上代码将记录以下内容:
Mozilla/5.0 (iPhone; CPU iPhone OS 8_1 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Mobile/12B411 Appended Custom User Agent
替代方案
为了使其更简单,可以使用“牺牲性”UIWebView,因为它可以同步地评估javascript。
UIWebView *webView = [[UIWebView alloc] initWithFrame:self.view.bounds];
NSString *userAgent = [webView stringByEvaluatingJavaScriptFromString:@"navigator.userAgent"];
NSString *newUserAgent = [userAgent stringByAppendingString:@" Appended Custom User Agent"];
NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:newUserAgent, @"UserAgent", nil];
[[NSUserDefaults standardUserDefaults] registerDefaults:dictionary];
self.wkWebView = [[WKWebView alloc] initWithFrame:self.view.bounds];
[self.wkWebView evaluateJavaScript:@"navigator.userAgent" completionHandler:^(id result, NSError *error) {
NSLog(@"%@", result);
}];
哪个记录了相同的内容:
Mozilla/5.0 (iPhone; CPU iPhone OS 8_1 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Mobile/12B411 Appended Custom User Agent
目前UIWebView和WKWebView使用相同的用户代理,但如果将来更改可能会导致问题。