2012-06-12 19 views
28

Mam formularz HTML, który ma pewne pola, które otwieram wewnątrz UIWebview. Po kliknięciu konkretnego przycisku chcę zrobić akcję w aplikacji.Jak przechwycić Przycisk kliknij wewnątrz interfejsu UIWebview na IOS?

Podejście, którego teraz używam, polega na kliknięciu przycisku i przekierowaniu strony do fałszywego adresu URL. Wyszukuję adres URL za pomocą metody delegującej "shouldStartLoadWithRequest" i zatrzymuję przekierowanie. Następnie robię własne zdarzenie (przechwytuję obraz i przesyłam), a następnie kontynuuję. To wydaje się być brzydkim hackerem. W każdym razie mogę bezpośrednio podłączyć się do zdarzenia kliknięcia przycisku, a nie do przekierowania strony?

UPDATE Wydaje się, że nie ma mowy, aby ustawić sposób przenosić na ogień, gdy funkcja JS jest nazywany na kliknięcia przycisku. Jedynym sposobem, aby to zrobić, jest użycie metody podsłuchiwania adresów URL wspomnianej powyżej. Zostało to szczegółowo wyjaśnione poniżej przez Johna, więc przyjmuję jego odpowiedź.

Odpowiedz

55

można wykonać następujące czynności:

w HTML

<a class="yourButton" href="inapp://capture">Button Text</a> 

W swojej UIWebViewDelegate

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { 
    if ([request.URL.scheme isEqualToString:@"inapp"]) { 
     if ([request.URL.host isEqualToString:@"capture"]) { 
     // do capture action 
     } 
     return NO; 
    } 
    return YES; 
} 

I dodał: "przechwytywanie" do adresu URL przycisku, tak aby można było rozróżnić kilka przyciski, które powinny wywoływać różne akcje (jeśli chcesz):

+1

Tak, to jest podejście, z którego już korzystam. Czy mimo to można dodać akcję do przycisku za pomocą kodu? To może nie być możliwe z powodu piaskownicy, ale po prostu chciałem się upewnić. –

+1

Czy możesz wyjaśnić, co masz na myśli mówiąc "akcja"? – joern

+0

Chodziło mi o to, jak dodać funkcję (metodę) do przycisku, tak aby wywołanie zwrotne kliknięcia przycisku przechodziło do tej funkcji. Czy to możliwe? lub czy przechwytywanie adresów URL jest jedynym sposobem na zrobienie tego? –

3

Ten kod:

<a class="yourButton" href="inapp://capture">Restart</a> 

nie działa dla mnie.

Dodałem "InApp: // uchwycić" w moim kodu JavaScript do funkcji zdarzeń

KeyboardInputManager.prototype.restart = function (event) { 
    window.location.href = "inapp://capture"; 
    //other code 
}; 

Również używam UIWebViewDelegate i działa na iOS 8, 9.

Powiązane problemy