2012-06-12 25 views
28

Tengo un formulario HTML que tiene ciertos campos que abro dentro de UIWebview. Al hacer clic en un botón en particular, quiero hacer una acción en la aplicación.cómo interceptar el botón Haga clic dentro de UIWebview en IOS?

El enfoque que estoy utilizando ahora es al hacer clic en el botón i redirigir la página a una URL ficticia. Intento olfatear la URL usando el método delegado "shouldStartLoadWithRequest" y detengo la redirección. Luego hago mi evento personalizado (capturar imagen y cargar) y luego continuar. Esto parece ser un hack feo. De todos modos, puedo conectar directamente el evento de clic de botón en lugar de una redirección de página.

ACTUALIZACIÓN Parece que no hay forma de configurar un método de delegado para disparar cuando se llama a una función JS al hacer clic en el botón. La única forma de hacerlo es usar el método de detección de URL mencionado anteriormente. Esto ha sido explicado en detalle por joern a continuación, así que aceptaré su respuesta.

Respuesta

55

Usted puede hacer lo siguiente:

En su HTML

<a class="yourButton" href="inapp://capture">Button Text</a> 

En su UIWebViewDelegate

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { 
    if ([request.URL.scheme isEqualToString:@"inapp"]) { 
     if ([request.URL.host isEqualToString:@"capture"]) { 
     // do capture action 
     } 
     return NO; 
    } 
    return YES; 
} 

añadí "capturar" a la URL de su botón de modo que se podía distinguir entre varios botones que deben desencadenar diferentes acciones (si lo desea):

+1

Sí, este es el enfoque que ya estoy usando. ¿Hay alguna forma de agregar una acción al botón a través del código? Esto puede no ser posible debido a sandboxing, supongo, pero solo quería asegurarse. –

+1

¿Podría aclarar qué quiere decir con "acción"? – joern

+0

Quise decir cómo agregar una función (método) al botón hacer clic para que la devolución de llamada del clic del botón vaya a esta función. ¿Es posible? o es la interceptación de URL la única forma de hacer esto? –

3

Este código:

<a class="yourButton" href="inapp://capture">Restart</a> 

no funciona para mí.

He añadido "InApp: // Captura" en mi código javascript para la función del evento

KeyboardInputManager.prototype.restart = function (event) { 
    window.location.href = "inapp://capture"; 
    //other code 
}; 

También utilizo el UIWebViewDelegate y funciona para iOS 8, 9.

Cuestiones relacionadas