2012-06-12 8 views
28

Ho un modulo HTML con determinati campi che sto aprendo all'interno di UIWebview. Al clic di un particolare pulsante voglio fare un'azione in app.come intercettare Button click all'interno di UIWebview su IOS?

L'approccio che sto utilizzando ora è al clic del pulsante reindirizzare la pagina a un URL fittizio. Annuso l'URL usando il metodo delegate "shouldStartLoadWithRequest" e interrompo il reindirizzamento. Quindi faccio il mio evento personalizzato (acquisisci immagine e carica) e poi continuo. Questo sembra essere un brutto scherzo. Posso comunque collegarmi direttamente all'evento click del pulsante piuttosto che a un reindirizzamento della pagina?

UPDATE Non sembra esserci alcun modo per impostare un metodo delegato al fuoco quando una funzione JS viene chiamata sul pulsante di scatto. L'unico modo per farlo è utilizzare il metodo di sniffing URL sopra menzionato. Questo è stato spiegato in dettaglio da joern qui sotto, quindi accetterò la sua risposta.

risposta

55

È possibile effettuare le seguenti operazioni:

nel codice HTML

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

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

ho aggiunto "cattura" per l'URL del tuo pulsante in modo che si possa distinguere tra diversi pulsanti che dovrebbero attivare azioni diverse (se lo si desidera):

+1

Sì, questo è l'approccio che sto già usando. È comunque possibile aggiungere un'azione al pulsante tramite codice? Questo potrebbe non essere possibile a causa del sandboxing suppongo, ma volevo solo essere sicuro. –

+1

Potresti per favore chiarire cosa intendi con "azione"? – joern

+0

Intendevo come aggiungere una funzione (metodo) al clic del pulsante in modo che la richiamata del clic del pulsante vada a questa funzione. È possibile? o l'intercettazione di URL è l'unico modo per farlo? –

3

Questo codice:

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

non funziona per me.

Ho aggiunto "inapp: // catturare" nel mio codice javascript per la funzione di evento

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

Anche io uso l'UIWebViewDelegate e funziona per iOS 8, 9.

Problemi correlati