2013-04-13 15 views

Odpowiedz

23

Tak, jest to możliwe. W kodzie HTML, piszesz JS załadować URL z fałszywego systemu takiego jak

window.location = "request_for_action://anything/that/is/a/valid/url/can/go/here"; 

Następnie w kodzie iOS przypisać delegata do Webview, aw swoim delegatem, uchwyt

webView:shouldLoadWithRequest:navigationType 

z czymś

if([request.URL.scheme isEqualToString: @"request_for_action"]) 
{ 
    // parse your custom URL to extract parameter, use URL parts or query string as you like 
    return NO; // return NO, so webView won't actually try to load this fake request 
} 

-

tylko na bok, można to zrobić w inny sposób, co pozwoli na iOS de wywołaj niektóre kody JS w twoim html przez używając

NSString* returnValue = [self.webView stringByEvaluatingJavaScriptFromString: "someJSFunction()"]; 
9

Tak! Gdy użytkownik naciśnie link, usłyszysz o tym w delegacie widoku WWW i możesz wtedy robić, co chcesz. Potężne rzeczy można zrobić w ten sposób.

Delegat widoku WWW jest wysyłany webView:shouldStartLoadWithRequest:navigationType:. Analizujesz co się stało i reagujesz tak, jak chcesz. Aby nie dopuścić do tego, aby widok sieciowy próbował podążać za linkiem (który może być całkowicie fałszywy), po prostu zwróć NIE.

W tym przykładzie z aplikacji Wiadomości TidBITS, mam link na stronie internetowej, która używa całkowicie wymyślonego schematu play:. Wykryć, że w delegata i zaawansowania:

- (BOOL)webView:(UIWebView *)webView 
     shouldStartLoadWithRequest:(NSURLRequest *)r 
     navigationType:(UIWebViewNavigationType)nt { 
    if ([r.URL.scheme isEqualToString: @"play"]) { 
     [self doPlay:nil]; 
     return NO; 
    } 
    if (nt == UIWebViewNavigationTypeLinkClicked) { 
     [[UIApplication sharedApplication] openURL:r.URL]; 
     return NO; 
    } 
    return YES; 
} 
+0

Wygląda dokładnie to, co muszę osiągnąć. Ale nie wiem, gdzie mogę umieścić tę metodę? Dzięki, za odpowiedź opisową, przy okazji! –

+0

Umieszczasz to gdziekolwiek jest delegat UIWebView! – matt

+0

Alwesome, to działa! :) Jeszcze jedno pytanie: dlaczego po kliknięciu linku z wcześniej zdefiniowanym schematem URL aplikacja przekierowuje do Safari i próbuje ją otworzyć? –

2

Wdrożenie metody webView:shouldStartLoadWithRequest:navigationType:UIWebViewDelegate.

Uchwyt navigationType i żądanie w razie potrzeby.

+0

Ustawiłem delegata i zaimplementowałem metody delegatów uiwebview. Ale żadna z moich metod delegowania nie jest wywoływana, gdy klikam na jakąś zawartość interfejsu uiwebview. Nie ma połączenia zwrotnego. Co powinno być zrobione? – iPhoneDeveloper

+0

@iPhoneDeveloper Powinieneś zamieścić własne pytanie ze wszystkimi istotnymi szczegółami. – rmaddy

Powiązane problemy