2012-06-12 4 views
28

Ich habe ein HTML-Formular mit bestimmten Feldern, die ich in einem UIWebview öffne. Mit einem Klick auf eine bestimmte Schaltfläche möchte ich eine In-App-Aktion durchführen.Wie abzufangen Button klicken Sie in UIWebview auf IOS?

Der Ansatz, den ich jetzt benutze, ist per Klick auf den Button Ich leite die Seite auf eine Dummy-URL um. Ich schnüffle die URL mit der Delegate-Methode "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. Wie auch immer, ich kann direkt in das Button-Klick-Ereignis eingreifen anstatt in eine Seitenumleitung?

UPDATE Es scheint keine Möglichkeit zum Einrichten einer Delegate-Methode zu geben, die ausgelöst wird, wenn eine JS-Funktion beim Klicken auf die Schaltfläche aufgerufen wird. Die einzige Möglichkeit, dies zu tun, besteht darin, die oben erwähnte URL-Sniffing-Methode zu verwenden. Dies wurde unten ausführlich von joern erklärt, also werde ich seine Antwort akzeptieren.

Antwort

55

Sie können wie folgt vorgehen:

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

I "Capture", um Ihre Schaltfläche URL hinzugefügt, so dass Sie zwischen mehreren unterscheiden konnte Schaltflächen, die verschiedene Aktionen auslösen sollen (wenn Sie möchten):

+1

Ja, Das ist der Ansatz, den ich bereits verwende. Gibt es trotzdem eine Aktion um den Button per Code hinzuzufügen? Dies ist möglicherweise aufgrund von Sandboxing nicht möglich, aber ich wollte nur sichergehen. –

+1

Könnten Sie bitte klarstellen, was Sie mit "Aktion" meinen? – joern

+0

Ich meinte, wie man eine Funktion (Methode) zum Knopfklick hinzufügt, so dass der Rückruf des Knopfes Klick zu dieser Funktion geht. Ist es möglich? Oder ist die URL-Überwachung die einzige Möglichkeit, dies zu tun? –

3

Dieser Code:

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

funktioniert nicht für mich.

Ich habe "inapp: // erfassen", ergänzt in meinem Javascript-Code für Event-Funktion

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

Auch verwende ich die UIWebViewDelegate und es funktioniert für iOS 8, 9.