Maison > Article > interface Web > Explication détaillée de l'exemple de code pour utiliser JavaScriptCore pour réaliser l'interaction OC et JS
JavaScriptCore est une partie importante du webkit, analysant principalement JS et fournissant une exécution environnement.L'article suivant vous présente principalement les informations pertinentes sur l'utilisation de JavaScriptCore pour réaliser l'interaction entre OC et JS. L'introduction dans l'article est très détaillée. Les amis qui en ont besoin peuvent s'y référer ensemble. >
JavascriptCore
JavascriptCore est une partie importante du webkit, qui analyse principalement JS et fournit un environnement d'exécution après qu'Apple l'ait lancé sur la plate-forme iPhone. facilite notre fonctionnement de js.Créez d'abord une webView et lisez le fichier html local
NSURL* htmlURL = [[NSBundle mainBundle] URLForResource: @"demo" withExtension: @"html"]; [_webView loadRequest: [NSURLRequest requestWithURL: htmlURL]];Dans la démo, nous devons implémenter 4 situations
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <script type="text/javascript"> function showAlert(){ alert('OC call JS with no argument'); } function showAlertWithString(string){ alert(string); } function callOCWithArgument() { jsCallOCWithArgument('参数1 ','参数2 ','参数3'); } </script> </head> <body> </br> </br> </br> </br> <form> <button type='button' onclick='callOC()'>jsCallOC</button> <button type='button' onclick='callOCWithArgument()'>jsCallOCWithArgument</button> </form> </body> </html>JS appelle OC
Dans la méthode proxy webViewDidFinishLoad de webView
Nous définissons un bloc puis l'enregistrons dans le contexte, qui est en fait converti dans JS. La fonction nommée callOC. Ensuite, nous exécutons cette fonction directement, et les paramètres passés par-(void)webViewDidFinishLoad:(UIWebView *)webView { _context = [webView valueForKeyPath:@"documentView.webView.mainFrame.javascriptContext"]; weak typeof(self) weakSelf = self; _context.exceptionHandler = ^(JSContext *context, JSValue *exception) { weakSelf.context.exception = exception; }; //js调用OC _context[@"callOC"] = ^() { NSArray *args = [JSContext currentArguments]; for (JSValue *jsVal in args) { NSLog(@"%@", jsVal.toString); } dispatch_async(dispatch_get_main_queue(), ^{ UIAlertController *alertView = [UIAlertController alertControllerWithTitle:@"arguments" message:@"JS Call OC With No Argument" preferredStyle:UIAlertControllerStyleAlert]; UIAlertAction * action = [UIAlertAction actionWithTitle:@"Done" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { }]; [alertView addAction:action]; [weakSelf presentViewController:alertView animated:YES completion:nil]; }); }; _context[@"jsCallOCWithArgument"] = ^() { NSArray *args = [JSContext currentArguments]; NSMutableString * stirng = [NSMutableString string]; for (JSValue * value in args) { [stirng appendString:value.toString]; } dispatch_async(dispatch_get_main_queue(), ^{ UIAlertController *alertView = [UIAlertController alertControllerWithTitle:@"arguments" message:stirng preferredStyle:UIAlertControllerStyleAlert]; UIAlertAction * action = [UIAlertAction actionWithTitle:@"Done" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { }]; [alertView addAction:action]; [weakSelf presentViewController:alertView animated:YES completion:nil]; }); }; }
peuvent être acceptés via le tableau [JSContext currentArguments], qui est
pour initialiser deux boutons et implémenter la méthode suivante dans l'événement click
- (IBAction)callJS:(id)sender { [_context evaluatescript:@"showAlert()"]; } - (IBAction)callJSWithArguments:(id)sender { [_context evaluatescript:@"showAlertWithString('OC call JS with arguments')"]; // [_context[@"showAlertWithString"] callWithArguments:@[@"OC call JS with arguments"]]; }
Résumé
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!