Il existe quelques bibliothèques, mais je n'ai pas utilisé l'une d'entre elles dans de grands projets, alors vous pourriez vouloir les essayer :
-
Cependant, je pense que c'est quelque chose d'assez simple pour que vous puissiez l'essayer vous-même. J'ai personnellement fait exactement cela lorsque j'en ai eu besoin. Vous pouvez également créer une bibliothèque simple qui répond à vos besoins.
1. Exécuter des méthodes JS depuis Objective-C
Il s'agit en fait d'une seule ligne de code.
NSString *returnvalue = [webView stringByEvaluatingJavaScriptFromString:@"your javascript code string here"];
Plus de détails sur le site officiel Documentation sur les UIWebView .
2. Exécuter des méthodes Objective-C depuis JS
C'est malheureusement un peu plus complexe, car il n'y a pas la même propriété (et classe) windowScriptObject qui existe sur Mac OSX permettant une communication complète entre les deux.
Cependant, vous pouvez facilement appeler à partir de javascript des URLs personnalisées, comme :
window.location = yourscheme://callfunction/parameter1/parameter2?parameter3=value
Et l'intercepter depuis l'Objective-C avec ceci :
- (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType {
NSURL *URL = [request URL];
if ([[URL scheme] isEqualToString:@"yourscheme"]) {
// parse the rest of the URL object and execute functions
}
}
Ce n'est pas aussi propre que cela devrait l'être (ou en utilisant windowScriptObject) mais cela fonctionne.
3. Ecouter les événements natifs de JS depuis Objective-C (par exemple l'événement DOM ready)
D'après l'explication ci-dessus, vous voyez que si vous voulez faire cela, vous devez créer du code JavaScript, l'attacher à l'événement que vous voulez surveiller et appeler la bonne méthode. window.location
pour être ensuite intercepté.
Encore une fois, ce n'est pas aussi propre que ça devrait l'être, mais ça fonctionne.
1 votes
Vous pouvez utiliser WKWebView : appel depuis javascript window.webkit.messageHandlers.{NAME}.postMessage(message) et ensuite le gérer avec [WKUserContentController addScriptMessageHandler:name :] pour appeler Objective-C depuis JS