2010-01-27 16 views

Respuesta

31

Las solicitudes web realizadas desde UIWebView no incluirán la palabra "Safari" en la cadena del agente de usuario. Las solicitudes web hechas desde Mobile Safari lo harán. Esta es la mejor manera que he encontrado para determinar si una solicitud proviene de una aplicación o de Mobile Safari.

Muestra Agente de Usuario de UIWebView dentro App:

User-Agent: Mozilla/5.0 (iPad; U; CPU OS 4_3_2 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Mobile 

Muestra Agente de usuario de Mobile Safari:

User-Agent: Mozilla/5.0 (iPad; U; CPU OS 4_3_2 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8H7 Safari 
+2

vista web de Android envía la cabecera HTTP "X-solicitada-Con". El navegador independiente no. ¿UIWebView de iPhone hace esto también? ver http://stackoverflow.com/a/15254092/90236 –

+0

Lamentablemente, esta respuesta falla con Chrome iOs. Estos son los UA para Safari y Chrome. Ambos contienen "Safari" --- 'Mozilla/5.0 (iPhone; CPU iPhone OS 7_1_1 como Mac OS X) AppleWebKit/537.51.2 (KHTML, como Gecko) Versión/7.0 Mobile/11D201 Safari/9537.53' --- 'Mozilla/5.0 (iPhone; CPU iPhone OS 7_1_1 como Mac OS X) AppleWebKit/537.51.1 (KHTML, como Gecko) CriOS/35.0.1916.38 Móvil/11D201 Safari/9537.53' –

+1

@ bfred.it Yo no entiende tu comentario La pregunta no tenía nada que ver con la distinción de diferentes navegadores móviles entre sí. Solo para distinguir un UIWebView incrustado del navegador integrado. – Johann

11

cadenas de agente de usuario de Safari móviles independientes contiene la palabra 'Version', mientras que el agente de usuario UIWebView las cadenas no. Por lo tanto, la secuencia de comandos de detección puede ser modificado para trabajar con la última versión de iOS, así:

var is_uiwebview = /(iPhone|iPod|iPad).*AppleWebKit(?!.*Version)/i.test(navigator.userAgent); 
+0

¡Gracias por escribir una expresión regular para esto! – aendrew

+0

'var is_uiwebview =/((iPhone | iPod | iPad). * AppleWebKit (?! * Versión) |; wv) /i.test (navigator.userAgent);' también detecta las vistas web de android – buggedcom

Cuestiones relacionadas