iPad Pro "HTTP_USER_AGENT" of iOS UIWebView
iPad Pro "HTTP_USER_AGENT" of iOS UIWebView
我在新的 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
因此,Web 端程序的反应就好像此设备是 iPhone。我如何在服务器端程序中区分 iPad Pro 和 iPhone?
通过添加 Launch Screen.stoyboard,此问题将得到解决。
我遇到了同样的问题,并使用 WKWebView
而不是 UIWebView
解决了它。这种用于显示 Web 内容的新实现是 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"];
我在新的 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
因此,Web 端程序的反应就好像此设备是 iPhone。我如何在服务器端程序中区分 iPad Pro 和 iPhone?
通过添加 Launch Screen.stoyboard,此问题将得到解决。
我遇到了同样的问题,并使用 WKWebView
而不是 UIWebView
解决了它。这种用于显示 Web 内容的新实现是 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"];