我在新的iPad Pro上测试了我的现有iOS应用程序,发现UIWebview的HTTP_USER_AGENT文本是...
Mozilla/5.0 (iPhone; CPU iPhone OS9_1 like Mac OS X) AppleWebKit/601.1.46(KHTML, like Gecko)Mobile/13B143
因此,网页端程序的反应就好像这个设备是iPhone。我如何在服务器端程序中区分iPad Pro和iPhone?
我在新的iPad Pro上测试了我的现有iOS应用程序,发现UIWebview的HTTP_USER_AGENT文本是...
Mozilla/5.0 (iPhone; CPU iPhone OS9_1 like Mac OS X) AppleWebKit/601.1.46(KHTML, like Gecko)Mobile/13B143
因此,网页端程序的反应就好像这个设备是iPhone。我如何在服务器端程序中区分iPad Pro和iPhone?
我曾经遇到同样的问题,通过使用WKWebView
而不是UIWebView
解决了它。这种新的显示网页内容的实现方式是Apple推荐的,因为似乎UIWebView将被弃用。
关于这个新对象,它评估JavaScript的方法是异步的。因此,如果您想使用同步方法获取userAgent,您应该创建自己的WKWebView类别,如here所述。
代码应该像这样:
@interface WKWebView(SynchronousEvaluateJavaScript)
- (NSString *)stringByEvaluatingJavaScript:(NSString *)script;
@end
@implementation WKWebView(SynchronousEvaluateJavaScript)
- (NSString *)stringByEvaluatingJavaScript:(NSString *)script
{
__block NSString *resultString = nil;
[self evaluateJavaScript:script completionHandler:^(id result, NSError *error) {
if (error == nil) {
if (result != nil) {
resultString = [NSString stringWithFormat:@"%@", result];
}
} else {
NSLog(@"evaluateJavaScript error : %@", error.localizedDescription);
}
}];
while (resultString == nil)
{
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
}
return resultString;
}
@end
而且调用方式与以前相同:
WKWebView *webView = [[WKWebView alloc] initWithFrame:CGRectZero];
defaultUserAgent = [webView stringByEvaluatingJavaScript:@"navigator.userAgent"];