2012-03-30 23 views
5

Obecnie biorę this sample website i pokazano w moim webview. Strona wyświetla się poprawnie.Uzyskiwanie wybranych elementów programowo z uiwebview?

Teraz próbuję dowiedzieć się, które dane są wybierane, gdy użytkownik stuknął w uiwebview.

Za to jestem w stanie uzyskać CGPoint dla kranu za pomocą 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] 

chcę uzyskać dokładne dane raz użytkownik wybierze pionowy pasek w pierwszym wykresie (np 1994/1995/1996).

Czy ktoś może wyjaśnić, jak to zrobić?

+0

Czy strona HTML jest pod kontrolą? – sergio

+0

Nie mam jej pod kontrolą.Ale nadal możesz zasugerować swoją operację :) – raaz

Odpowiedz

0

Jeśli są wszystkie niezależnych elementów DOM, powinieneś być w stanie słuchać na imprezach touchstart w JavaScript, a gdy pojawi się obiekt zdarzenia, powinien mieć event.target będzie to element użytkownik kliknął. Następnie możesz przechwycić potrzebne dane w JS, a następnie wysłać je z powrotem do Objective-c. Najlepszym sposobem na uzyskanie danych z JS do kodu natywnego jest użycie UIWebView delegate, powinno to wystarczyć!

0

Kiedy użytkownik dokonuje wyboru na UIWebView, złożyć wniosek http AJAX, które można przechwycić w UIWebViewDelegate realizacji sposobu

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

.

Następnie można zaakceptować żądanie ładowania, zablokować, przeanalizować, zrobić, co chcesz z nim.

2

Nie określić, jakie jest to, że nie pracuje dla ciebie ... W każdym razie, kilka sugestii:

  1. spróbuj następujących JS w swojej obsługi kranu:

    NSString *js = [NSString stringWithFormat:@"document.elementFromPoint(%f, %f).innerHTML", touchPoint.x, touchPoint.y]; 
    
  2. podczas tworzenia kranu obsługi gest określić delegata dla niego (może to być kontroler):

    tap1.delegate = self; 
    
  3. w kontrolerze (lub zobaczyć web delegata), określić w następujący sposób Delegat:

    - (BOOL)gestureRecognizer:(UIGestureRecognizer*)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer: (UIGestureRecognizer*)otherGestureRecognizer { 
        return YES; 
    } 
    
  4. jeśli używasz iOS 5, rzucić okiem na this article about a glitch in elementFromPoint.

Robiąc tak, jestem w stanie uzyskać dokładną wartość HTML dla wybranego obiektu.

+0

Uważaj, to nie działa dobrze w przypadku obrazów Google lub innych witryn, które wyświetlają obrazy w zabawny sposób ... – jjxtra

Powiązane problemy