У меня была такая проблема, и уладила его с использованием 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"];
Как вы получаете строку агента пользователя? –
Я нашел веб-представление другого приложения, отправленное http_user_agent как «iPad». Таким образом, эта проблема имеет сторону приложения. Я собираюсь проверить различия между этими двумя приложениями. –
l'L'I в моем php-коде ... echo $ _SERVER ['HTTP_USER_AGENT']; –