Heim > Artikel > Web-Frontend > Detaillierte Erläuterung des Beispielcodes mit JavaScriptCore zur Realisierung der OC- und JS-Interaktion
JavaScriptCore ist ein wichtiger Teil des Webkits, der hauptsächlich JS analysiert und eine Ausführung bereitstellt Der folgende Artikel stellt Ihnen hauptsächlich die relevanten Informationen zur Verwendung von JavaScriptCore vor, um die Interaktion zwischen OC und JS zu realisieren >
JavascriptCore
JavascriptCore ist ein wichtiger Teil des Webkits, der hauptsächlich JS analysiert und eine Ausführungsumgebung bereitstellt, nachdem Apple es auf der iPhone-Plattform eingeführt hat erleichtert unseren Betrieb von js.Erstellen Sie zunächst eine WebView und lesen Sie die lokale HTML-Datei
NSURL* htmlURL = [[NSBundle mainBundle] URLForResource: @"demo" withExtension: @"html"]; [_webView loadRequest: [NSURLRequest requestWithURL: htmlURL]];In der Demo müssen wir 4 Situationen implementieren >
<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 ruft OC auf
In der Proxy-Methode webViewDidFinishLoad von webView
Wir definieren einen Block und speichern ihn dann im Kontext, der tatsächlich konvertiert wird in JS. Dann führen wir diese Funktion direkt aus und die von-(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]; }); }; }
übergebenen Parameter können über das Array [JSContext currentArguments] akzeptiert werden, das JSValue ist >.
auf, um zwei Schaltflächen zu initialisieren und die folgende Methode im Click--Ereignis
Zusammenfassung- (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"]]; }
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung des Beispielcodes mit JavaScriptCore zur Realisierung der OC- und JS-Interaktion. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!