web-dev-qa-db-fra.com

JavaScript dans UIWebView Rappel à C / Objective-C

Existe-t-il un moyen d'obtenir un rappel à Objective-C lorsqu'un certain événement a été détecté dans un UIWebView? JavaScript peut-il envoyer un rappel à l'objectif-C?

35
LK.

Mise à jour - N'utilisez plus UIWebView plus. Utilisez WKWebView ou mieux encore (s'il convient à vos besoins et que vous bâtissez pour iOS 9), un contrôleur de vue Safari.

Mais si vous devez utiliser UIWebView, dans votre délégué UIWebView, fournissez une mise en œuvre pour webview: DoSpartLoadWithRequest: NavigationType :

Dans vos fichiers HTML ou JavaScript, ajoutez des fonctions qui envoient des URL à un schéma personnalisé (à des fins de lisibilité, le schéma personnalisé n'est pas nécessaire). Toutes les URL envoyées seront transmises à votre mise en œuvre de la méthode de l'objectif-C, puis vous pouvez faire ce que vous voudriez.

31
bpapa

Juste pour illustrer la solution de "BPAPA" avec le code réel:

Avertissement: Code non testé

Mettre en œuvre cette méthode dans le délégué de l'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 mettez un lien dans la 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 clair.

31
geon