Heim  >  Artikel  >  Web-Frontend  >  Detaillierte Erläuterung des Beispielcodes mit JavaScriptCore zur Realisierung der OC- und JS-Interaktion

Detaillierte Erläuterung des Beispielcodes mit JavaScriptCore zur Realisierung der OC- und JS-Interaktion

黄舟
黄舟Original
2017-03-28 14:09:291082Durchsuche

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 >

    JS ruft OC auf
  1. JS ruft OC auf und übergibt Parameter
  2. OC ruft JS auf
  3. OC ruft JS auf und übergibt Parameter

Der Code in der HTML-Datei lautet wie folgt

<html>
<head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 <script type="text/javascript">
 function showAlert(){
  alert(&#39;OC call JS with no argument&#39;);
 }
 function showAlertWithString(string){
  alert(string);
 }
 function callOCWithArgument() {
  jsCallOCWithArgument(&#39;参数1 &#39;,&#39;参数2 &#39;,&#39;参数3&#39;);
 }
 </script>
</head>
<body>
 </br>
 </br>
 </br>
 </br>
 <form>
  <button type=&#39;button&#39; onclick=&#39;callOC()&#39;>jsCallOC</button>
  <button type=&#39;button&#39; onclick=&#39;callOCWithArgument()&#39;>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 >.

OC ruft JS

auf, um zwei Schaltflächen zu initialisieren und die folgende Methode im Click--Ereignis

kann OC mit JS erreichen

Zusammenfassung
- (IBAction)callJS:(id)sender {
 [_context evaluatescript:@"showAlert()"];
}
- (IBAction)callJSWithArguments:(id)sender {

 [_context evaluatescript:@"showAlertWithString(&#39;OC call JS with arguments&#39;)"];
// [_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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn