2010-05-20 5 views

Répondre

30

Mise à jour - n'utilisez plus UIWebView. Utilisez WKWebView, ou mieux encore (si cela correspond à vos besoins et vous construisez pour iOS 9), un contrôleur Safari View.

Mais si vous devez utiliser UIWebView, dans votre délégué UIWebView, fournir une implémentation pour webView:shouldStartLoadWithRequest:navigationType:

Dans votre fichier HTML ou Javascript, ajouter des fonctions qui envoient des URL à un système personnalisé (pour des raisons de lisibilité, le système personnalisé ISN n'est pas nécessaire). Toutes les URL envoyées seront transmises à votre implémentation de la méthode Objective-C, et vous pourrez ensuite faire ce que vous voulez.

+3

Existe-t-il un exemple de code pour illustrer cela? – nishantcm

+0

Existe-t-il une autre option pour y parvenir? (par exemple, avec des versions iOS plus récentes)? –

+1

@ lysergic-acid Je n'ai pas vraiment raté WebViews depuis un moment, mais j'imagine que non car c'est en fait une très bonne solution. A moins que vous ne puissiez lier un bloc aux événements JS (consultez les documents UIWebView). iOS 7 a ajouté JavaScriptCore mais je ne suis pas sûr que ce serait utile ici. – bpapa

30

Juste pour illustrer la solution par "bpapa" avec le code réel:

AVERTISSEMENT: code non testé

Mettre en œuvre cette méthode dans le délégué du UIWebView ...

-(BOOL) webView:(UIWebView *)inWeb shouldStartLoadWithRequest:(NSURLRequest *)inRequest navigationType:(UIWebViewNavigationType)inType { 
    if ([[[inRequest URL] scheme] isEqualToString:@"callback"]) { 

     // Do something interesting... 

     return NO; 
    } 

    return YES; 
} 

.. .puis mettre un lien dans le webwieb comme ceci:

<a href="callback:whatever">Click me</a> 

Et il devrait activer votre code de rappel. De toute évidence, vous pouvez le déclencher avec un javascript au lieu d'un lien simple.

+3

Je pense que le schéma ne contient pas les deux points. Ce serait juste @ "callback". Et pour la comparaison, je pense que vous devriez utiliser '- (BOOL) isEqualToString: (NSString *) aString;' – mkko

+0

@mkko: corrigé – geon

+0

+1 -il a fonctionné. Merci @geon –

Questions connexes