JavaScriptCoreを使ってOCとJSの連携を実現するサンプルコードを詳しく解説

黄舟
リリース: 2017-03-28 14:09:29
オリジナル
1087 人が閲覧しました

JavaScriptCore は Webkit の重要な部分であり、主に JS を解析して実行環境を提供します。以下の記事が主ですJavaScriptCore を使用して OC と JS 間の相互作用を実現するための関連情報を紹介します。必要な方はぜひ参考にしてください。

JavascriptCore は Webkit です。重要なコンポーネントは JS を解析し、実行環境を提供することです。iOS7 以降、Apple はこれを iPhone プラットフォーム上でリリースしました。これにより、JS の操作が大幅に容易になります。 うわー

デモでは、4つの状況を実装する必要があります

JSがOCを呼び出す

JSがOCを呼び出してパラメータを渡す
  1. OCがJSを呼び出す
  2. OCがJSを呼び出してパラメータを渡す
  3. HTMLファイル内のコードは以下の通りです


     NSURL* htmlURL = [[NSBundle mainBundle] URLForResource: @"demo" withExtension: @"html"];
    [_webView loadRequest: [NSURLRequest requestWithURL: htmlURL]];
    ログイン後にコピー

  4. JSはOC

を呼び出します。webView

<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>
ログイン後にコピー

のプロキシメソッドwebViewDidFinishLoadでブロックを定義し、それをコンテキストに保存します。は、callOC 関数という名前の JS に変換され、この関数を直接実行し、ブロック内のコンテンツを呼び出します。これは、

OC が JS を呼び出す JSValue オブジェクトである [JSContext currentArguments] 配列を通じて受け取ることができます。

2つのButtonを初期化し、クリック

イベント

に以下のメソッド

-(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];
  });
 }; 
}
ログイン後にコピー

を実装してJS呼び出しのOCを実現します

概要

以上がJavaScriptCoreを使ってOCとJSの連携を実現するサンプルコードを詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート