2012-03-30 25 views
5

Actualmente estoy tomando this sample website y mostrando en mi vista web. La página web se muestra correctamente.Obtención de elementos seleccionados programáticamente de uiwebview?

Ahora estoy tratando de averiguar qué datos se seleccionan una vez que el usuario ha tocado el uiwebview.

Para esto puedo obtener el CGPoint para el grifo usando UITapGestureRecognizer.

-(void)singleTap:(UIGestureRecognizer *)gestureRecognizer 
{ 

CGPoint touchPoint = [gestureRecognizer locationInView:myWebView]; 

NSString *js = [NSString stringWithFormat:@"document.elementFromPoint(%f, %f).toString()", touchPoint.x, touchPoint.y]; 

NSString * tagName = [myWebView stringByEvaluatingJavaScriptFromString:js]; 

NSLog(@"Selected Name: %@",tagName); 

} 

// In log it is displaying [object SVGPathElement] 

quiero obtener los datos exactos una vez que el usuario selecciona la barra vertical en el primer gráfico (Por ejemplo 1994/1995/1996).

¿Alguien puede explicar cómo hacer esto?

+0

¿La página HTML está bajo su control? – sergio

+0

No, no está bajo mi control. Pero todavía puedes sugerir tu opción :) – raaz

Respuesta

0

Si son todos elementos DOM independientes, que debe ser capaz de detectar eventos touchstart en JavaScript, y cuando llegue el objeto de evento, debe tener event.target, este será el elemento que el usuario ha hecho clic en. A continuación, puede capturar los datos que necesita en JS y luego enviarlos de vuelta a Objective-c. La mejor forma de obtener datos de JS en código nativo es usar UIWebView delegate, ¡con suerte, este es el truco para usted!

0

Cuando el usuario haga una selección en la UIWebView, realizar una solicitud HTTP AJAX, que puede interceptar en su UIWebViewDelegate la realización del procedimiento

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType; 

.

Luego puede aceptar la carga de la solicitud, bloquearla, analizarla, hacer lo que quiera con ella.

2

No se especifica lo que no funciona para usted ... de todos modos, un par de sugerencias:

  1. tratar con los siguientes js en el controlador del grifo:

    NSString *js = [NSString stringWithFormat:@"document.elementFromPoint(%f, %f).innerHTML", touchPoint.x, touchPoint.y]; 
    
  2. al crear su manejador gesto del grifo, especifique un delegado para ello (que puede ser su controlador):

    tap1.delegate = self; 
    
  3. en su controlador (o vista web delegado), defina el siguiente método delegado:

    - (BOOL)gestureRecognizer:(UIGestureRecognizer*)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer: (UIGestureRecognizer*)otherGestureRecognizer { 
        return YES; 
    } 
    
  4. si está utilizando IOS 5, echar un vistazo a this article about a glitch in elementFromPoint.

Al hacer esto, puedo obtener el valor HTML exacto para el objeto seleccionado.

+0

Ten en cuenta que esto no funciona bien para las imágenes de Google u otros sitios que muestran imágenes de manera divertida ... – jjxtra

Cuestiones relacionadas