Intercepter les events de prise inutilisés dans un UIWebView

Je travaille sur une application iPad basée sur un UIWebView: pour l'expliquer dans les termes les plus simples possible, l'application montre un grand webview interactif et en plus il supporte les gestes personnalisés.

J'ai besoin d'attraper des events qui représentent des taps uniques sur le webview, mais seulement quand les taps n'ont pas déjà été consommés par le webview (ie ils ne sont pas le début d'une opération scroll / zoom, ils ne sont pas tapés sur des liens, ils ne sont pas taps qui triggersnt un peu de javascript).

L'UIWebView est très gourmand avec ses évènements, et dans mon expérience il tend à ne pas les propager, même quand ils ne sont pas consommés. Pour attraper les events, j'ai fini par sous-classr l'UIWindow principal (voir http://mithin.in/2009/08/26/detecting-taps-and-events-on-uiwebview-the-right-way/ ). Cela fonctionne bien, mais le problème est que je ne suis pas capable de savoir si les taps que j'obtiens ont déclenché du javascript dans le webview ou non.

En tant que ressortingction supplémentaire, je n'ai aucun contrôle sur le javascript qui va s'exécuter dans l'UIWebView ou le HTML qui va être affiché.

Ainsi, la question est la suivante: quelle serait la manière de détecter tous et uniquement les events tapés qui n'ont déclenché aucune autre action dans UIWebView lui-même, en particulier les actions javascript?

~

Si vous êtes curieux, le code source du projet sur lequel je travaille est sur GitHub: pour le find, requestz à Google de vous montrer Baker Framework.

Faites ceci avec JavaScript. Tout d'abord, après le chargement de votre webview, attachez un gestionnaire de clic javascript au corps pour absorber les clics inutilisés. Avoir charger un domaine inventé comme c'est l'action:

- (void)webViewDidFinishLoad:(UIWebView *)webView { NSSsortingng *script = @"document.body.onclick = function () { document.location.href = 'http://clickhandler'; }" [webView ssortingngByEvaluatingJavaScriptFromSsortingng:script]; } 

Ensuite, dans votre délégué WebView, cherchez des tentatives pour charger ce domaine inventé et les intercepter. Vous avez maintenant un moyen d'intercepter ce gestionnaire de clic javascript avec du code natif et de réagir en conséquence:

 - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { if ([request.URL.host isEqualToSsortingng:@"clickhandler"]) { //handle click //your logic here return NO; } return YES; }