iPad Pro" HTTP_USER_AGENT" iOS UIWebView

时间:2015-11-13 04:58:23

标签: ios ipad

我在新的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?

2 个答案:

答案 0 :(得分:2)

通过添加Launch Screen.stoyboard,可以解决此问题。

答案 1 :(得分:0)

我遇到了同样的问题,并使用WKWebView代替UIWebView解决了问题。这个用于显示Web内容的新实现是Apple推荐的实现,因为似乎不推荐使用UIWebView。

关于这个新对象的一件事是,评估JavaScript的方法是异步的。因此,如果要使用同步方法来获取userAgent,则应按照here所述创建自己的WKWebView类别。

代码应该是这样的

@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"];