2010-05-20 8 views

Respuesta

30

Actualización: ya no utilices UIWebView. Use WKWebView, o mejor aún (si se ajusta a sus necesidades y está compilando para iOS 9), un Controlador de Safari View.

Pero si tiene que usar UIWebView, en su delegado UIWebView, proporcionar una implementación para webView:shouldStartLoadWithRequest:navigationType:

En su archivos HTML o Javascript, añadir funciones que envían las direcciones URL a un esquema personalizado (por motivos de legibilidad, el ISN combinación personalizada no se requiere). Todas las URL enviadas se transferirán a la implementación del método Objective-C y luego podrá hacer lo que desee.

+3

¿Hay algún ejemplo de código para ilustrar esto? – nishantcm

+0

¿Hay alguna otra opción para lograr esto? (por ejemplo, con las versiones más nuevas de iOS)? –

+1

@ lisérgico-ácido No me he equivocado mucho con WebViews en un tiempo, pero me imagino que no, ya que esta es una solución bastante agradable. A menos que de alguna manera pueda vincular un bloque a eventos JS (consulte los documentos de UIWebView). iOS 7 agregó JavaScriptCore, pero no estoy seguro de que sea útil aquí. – bpapa

30

Sólo para ilustrar la solución por "bpapa" con el código real:

ADVERTENCIA: código no probado

implementar este método en el delegado del UIWebView ...

-(BOOL) webView:(UIWebView *)inWeb shouldStartLoadWithRequest:(NSURLRequest *)inRequest navigationType:(UIWebViewNavigationType)inType { 
    if ([[[inRequest URL] scheme] isEqualToString:@"callback"]) { 

     // Do something interesting... 

     return NO; 
    } 

    return YES; 
} 

.. .entonces ponga un enlace en la webwieb como este:

<a href="callback:whatever">Click me</a> 

Y debería activar su código de devolución de llamada. Obviamente, podría desencadenarlo con un javascript en lugar de un simple enlace.

+3

Creo que el esquema no contiene los dos puntos. Sería solo @ "devolución de llamada". Y para la comparación, creo que debería usar '- (BOOL) isEqualToString: (NSString *) aString;' – mkko

+0

@mkko: se corrigió – geon

+0

+1 -ha funcionado. Gracias @geon –

Cuestiones relacionadas