Ho avuto lo stesso problema e l'ho risolto utilizzando WKWebView
anziché UIWebView
. Questa nuova implementazione per la visualizzazione di contenuti Web è quella consigliata da Apple, in quanto sembra che UIWebView sia deprecato.
Una cosa su questo nuovo oggetto è che il metodo per valutare un JavaScript è asincrono. Pertanto, se si desidera utilizzare un metodo sincrono per recuperare l'utenteAgent, è necessario creare la propria categoria di WKWebView come spiegato here.
Il codice dovrebbe essere qualcosa di simile
@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
E l'invocazione è proprio la stessa di prima:
WKWebView *webView = [[WKWebView alloc] initWithFrame:CGRectZero];
defaultUserAgent = [webView stringByEvaluatingJavaScript:@"navigator.userAgent"];
Come va la stringa user agent? –
Ho trovato la webview di un'altra app inviata http_user_agent come "iPad". Quindi, questo problema riguarda il lato app. Vado a verificare le differenze tra il codice di queste due app. –
to l'L'I nel mio codice php ... echo $ _SERVER ['HTTP_USER_AGENT']; –