2012-03-30 10 views
5

Attualmente sto prendendo this sample website e visualizzato nella mia webview. La pagina web viene visualizzata correttamente.Ottenere gli elementi selezionati in modo programmatico da uiwebview?

Ora sto cercando di capire quali dati vengono selezionati una volta che l'utente ha premuto su uiwebview.

Per questo sono in grado di ottenere il CGPoint per il rubinetto utilizzando 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] 

voglio ottenere i dati esatti una volta utente seleziona la barra verticale nel primo grafico (ad esempio 1994/1995/1996).

Qualcuno può spiegare come si fa?

+0

La pagina HTML è sotto il tuo controllo? – sergio

+0

No non è sotto il mio controllo.Ma ancora puoi suggerire il tuo opsione :) – raaz

risposta

0

Se sono tutti gli elementi DOM indipendenti, si dovrebbe essere in grado di ascoltare per eventi TouchStart in JavaScript, e quando si ottiene l'oggetto evento, si dovrebbe avere event.target, questo sarà l'elemento l'utente fa clic su. È quindi possibile acquisire i dati necessari in JS e quindi inviarli nuovamente a Objective-c. Il modo migliore per ottenere dati da JS a codice nativo è usare uno UIWebView delegate, questo dovrebbe essere il trucco che fa per te!

0

Quando l'utente effettua una selezione sul UIWebView, effettuare una richiesta HTTP AJAX, che si può intercettare nel vostro UIWebViewDelegate attuazione del metodo

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

.

Quindi puoi accettare la richiesta di caricamento, bloccarla, analizzarla, fare quello che vuoi con esso.

2

Non si specifica che cosa è che non funziona per voi ... in ogni caso, un paio di suggerimenti:

  1. provare con le seguenti js nel vostro gestore di rubinetto:

    NSString *js = [NSString stringWithFormat:@"document.elementFromPoint(%f, %f).innerHTML", touchPoint.x, touchPoint.y]; 
    
  2. durante la creazione del gestore gesto rubinetto, specificare un delegato per esso (può essere il controller):

    tap1.delegate = self; 
    
  3. nel controller (o vista web delegato), definire il seguente metodo delegato:

    - (BOOL)gestureRecognizer:(UIGestureRecognizer*)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer: (UIGestureRecognizer*)otherGestureRecognizer { 
        return YES; 
    } 
    
  4. se si sta utilizzando iOS 5, uno sguardo ai this article about a glitch in elementFromPoint.

Così facendo, sono in grado di ottenere il valore HTML esatto per l'oggetto selezionato.

+0

Stai attento che questo non funziona bene per le immagini di Google o altri siti che visualizzano immagini in modi divertenti ... – jjxtra

Problemi correlati