webentwicklung-frage-antwort-db.com.de

wie kann ich Button Button in UIWebview auf IOS abfangen?

Ich habe ein HTML-Formular, das bestimmte Felder enthält, die ich in einem UIWebview öffne. Beim Klicken auf eine bestimmte Schaltfläche möchte ich eine In-App-Aktion ausführen.

Der Ansatz, den ich jetzt verwende, ist der Klick auf die Schaltfläche, um die Seite auf eine Dummy-URL umzuleiten. Ich erkenne die URL mit der Delegatmethode "shouldStartLoadWithRequest" und stoppe die Umleitung. Ich mache dann mein benutzerdefiniertes Ereignis (Bild aufnehmen und hochladen) und fahre dann fort. Dies scheint ein hässlicher Hack zu sein. Trotzdem kann ich mich direkt in das Button-Click-Ereignis einhaken und nicht auf eine Seitenumleitung.

UPDATE Es scheint keine Möglichkeit zu geben, eine Delegat-Methode einzurichten, die ausgelöst wird, wenn beim Klicken einer Schaltfläche eine JS-Funktion aufgerufen wird. Die einzige Möglichkeit, dies zu tun, ist die Verwendung der oben genannten URL-Sniffing-Methode. Dies wurde von joern unten ausführlich erklärt, daher werde ich seine Antwort akzeptieren.

29
B K

Sie können Folgendes tun:

In Ihrem HTML

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

In Ihrem 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;
}

Ich habe der URL Ihrer Schaltfläche "Capture" hinzugefügt, damit Sie zwischen mehreren Schaltflächen unterscheiden können, die verschiedene Aktionen auslösen sollen (wenn Sie möchten):

55
joern

Dieser Code:

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

funktioniert nicht für mich 

Ich habe "inapp: // capture" in meinem Javascript-Code für die Ereignisfunktion hinzugefügt

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

Ich benutze auch UIWebViewDelegate und es funktioniert für iOS 8, 9.

3
Malder

Für Swift 4.2

Tastencode in HTML-Seite:

<a class="catch-iOS" href="inapp://home">Продолжить покупки</a>

UIWebViewDelegate-Methode:

func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebView.NavigationType) -> Bool {
    if request.url?.scheme == "inapp" {
        if request.url?.Host == "home" {
            // do something
        }
    }
    return true
}
0
akonoplev