iPad Pro iOS UIWebView的"HTTP_USER_AGENT"

6

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


你是如何获取用户代理字符串的? - l'L'l
我发现另一个应用程序的webview将http_user_agent发送为“iPad”。因此,这个问题是应用程序方面的。我将检查这两个应用程序代码之间的差异。 - Keisuke Uemura
在我的 PHP 代码中,使用以下代码:echo $_SERVER['HTTP_USER_AGENT']; - Keisuke Uemura
2个回答

2
通过添加启动画面 Launch Screen.storyboard,可以解决这个问题。

谢谢你的问题/回答 - 我们的iOS应用程序也遇到了同样的问题。 - heisian
2
@Keisuke Uemura 是否有可能在不使用启动屏幕的情况下添加它? - Nir Golan

0

我曾经遇到同样的问题,通过使用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"];

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接