Miałem ten sam problem i rozwiązałem go, używając WKWebView
zamiast UIWebView
. Ta nowa implementacja do wyświetlania treści internetowych jest zalecana przez Apple, ponieważ wydaje się, że UIWebView ma być przestarzałe.
Jedną z cech tego nowego obiektu jest to, że metoda oceny JavaScript jest asynchroniczna. Dlatego, jeśli chcesz użyć metody synchronicznej do pobrania userAgent, powinieneś utworzyć własną kategorię WKWebView zgodnie z wyjaśnieniami here.
Kod powinien mieć coś takiego
@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
A inwokacja jest to samo, niż wcześniej:
WKWebView *webView = [[WKWebView alloc] initWithFrame:CGRectZero];
defaultUserAgent = [webView stringByEvaluatingJavaScript:@"navigator.userAgent"];
Jak się masz ciąg agenta użytkownika? –
Znalazłem widok innej aplikacji wysłany jako http_user_agent jako "iPad". Ten problem dotyczy aplikacji. Sprawdzę różnice między kodami tych dwóch aplikacji. –
do l'L'I w moim kodzie php ... echo $ _SERVER ['HTTP_USER_AGENT']; –