Tengo un UIWebView muy simple con contenido de mi paquete de aplicaciones. Me gustaría que cualquier enlace en la vista web se abra en Safari en lugar de en la vista web. es posible?
ios
uiwebview
mobile-safari
David Beck
fuente
fuente
Respuestas:
Agregue esto al delegado UIWebView:
(editado para verificar el tipo de navegación. también puede pasar
file://
solicitudes que serían enlaces relativos)Versión rápida:
Versión Swift 3:
Versión Swift 4:
Actualizar
Como
openURL
ha quedado en desuso en iOS 10:fuente
switch
es preferible para los tipos de enumeraciónSi alguien se pregunta, la solución de Drawnonward se vería así en Swift :
fuente
UIWebViewDelegate
Un comentario rápido a la respuesta del usuario 306253: tenga cuidado con esto, cuando intente cargar algo en UIWebView (es decir, incluso desde el código), este método evitará que suceda.
Lo que puede hacer para evitar esto (gracias Wade) es:
También es posible que desee manejar los tipos
UIWebViewNavigationTypeFormSubmitted
yUIWebViewNavigationTypeFormResubmitted
.fuente
Las otras respuestas tienen un problema: se basan en la acción que realiza y no en el enlace en sí para decidir si cargarlo en Safari o en la vista web.
Ahora a veces esto es exactamente lo que quieres, lo cual está bien; pero en otras ocasiones, especialmente si tiene enlaces de anclaje en su página, realmente desea abrir solo enlaces externos en Safari, y no enlaces internos. En ese caso, debe verificar la
URL.host
propiedad de su solicitud.Utilizo ese fragmento de código para verificar si tengo un nombre de host en la URL que se está analizando o si está incrustado html:
Por supuesto, puede adaptar la expresión regular a sus necesidades.
fuente
if (request.URL?.scheme != "file")
En Swift puedes usar el siguiente código:
Asegúrese de verificar el valor de URL y el tipo de navegación.
fuente
Aquí está el equivalente de Xamarin para iOS de la respuesta de drawnonward.
fuente
La respuesta aceptada no funciona.
Si su página carga URL a través de Javascript,
navigationType
seráUIWebViewNavigationTypeOther
. Que, desafortunadamente, también incluye cargas de páginas de fondo, como análisis.Para detectar la navegación de la página, debe compararla
[request URL]
con[request mainDocumentURL]
.Esta solución funcionará en todos los casos:
fuente
Nota de rechazo de la aplicación:
Finalmente
UIWbView
está muerto y Apple ya no lo aceptará.Apple comenzó a enviar correos electrónicos a todos los propietarios de aplicaciones que todavía usan
UIWebView
:Uso de API en desuso: Apple dejará de aceptar envíos de aplicaciones que usan
UIWebView
API.Apple se toma muy en serio la privacidad del usuario y es obvio que no permitirán una vista web insegura .
Entonces, elimine UIWebView de su aplicación lo antes posible. no use intentar usar
UIWebView
en la nueva aplicación creada y prefiero usarWKWebView
si es posibleEjemplo:
fuente
En mi caso, quiero asegurarme de que absolutamente todo en la vista web abra Safari, excepto la carga inicial, así que uso ...
fuente