2010-05-20 10 views

Odpowiedz

30

Aktualizacja - nie korzystaj już z interfejsu UIWebView. Użyj WKWebView lub jeszcze lepiej (jeśli odpowiada Twoim potrzebom i budujesz na iOS 9), kontroler Safari View.

Ale jeśli trzeba użyć UIWebView w swoim delegatem UIWebView, stanowią implementację webView:shouldStartLoadWithRequest:navigationType:

w HTML lub plików JavaScript, dodać funkcje, które wysyłają adresy URL do systemu użytkownika (dla celów czytelności ISN Schemat niestandardowy wymagane). Wszystkie wysłane URL-e zostaną przekazane do implementacji metody Objective-C, a następnie możesz zrobić to, co chcesz.

+3

Czy istnieje przykład kodu ilustrującego to – nishantcm

+0

Czy jest jakaś inna opcja, aby to osiągnąć? (na przykład w nowszych wersjach systemu iOS)? –

+1

@ lysergic-acid Od dawna nie działałem z WebView, ale wyobrażam sobie, że nie, ponieważ jest to całkiem niezłe rozwiązanie. Chyba, że ​​uda ci się powiązać blok z wydarzeniami JS (sprawdź dokumenty UIWebView). iOS 7 dodał JavaScriptCore, ale nie jestem pewien, czy byłoby to pomocne. – bpapa

30

Żeby zilustrować rozwiązania w drodze "bpapa" z rzeczywistego kodu:

UWAGA: Kod niesprawdzone

Wdrożenie tej metody w delegata UIWebView za ...

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

     // Do something interesting... 

     return NO; 
    } 

    return YES; 
} 

.. . następnie umieść link w webwieb w ten sposób:

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

I powinien aktywować twój kod zwrotny. Oczywiście można go wywołać z javascript zamiast zwykłego linku.

+3

Myślę, że schemat nie zawiera dwukropka. Byłby to po prostu "callback". I do porównania, myślę, że powinieneś użyć '- (BOOL) isEqualToString: (NSString *) aString;' – mkko

+0

@mkko: naprawiono to – geon

+0

+1 -to działało. Thanks @geon –

Powiązane problemy