zoukankan      html  css  js  c++  java
  • iOS原生与JS互调

    1、使用 JSContext ,首先获取当前webview JS上下文

    JSContext *context = [self.webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"]; 

    2.JS调用原生方法 

     __weak typeof(self) weakSelf = self;
        context[@"nativeTitle"] = ^(NSString *navTitle) {
            LRHLog(@"nativeTitle :%@",navTitle);
            dispatch_async(dispatch_get_main_queue(), ^{
                __strong typeof(weakSelf) strongSelf = weakSelf;
                [strongSelf.webViewController setNaviTitle:navTitle];
                //统计web停留时间
                [strongSelf mobClickWebLoadingTimeWith:navTitle];
            });
        };

    block中用来接收js的传值,“nativeTitle” 为定义好的方法名

    这里要注意两个问题:第一、block中注意jsContext对象的循环引用; 第二、block中是在子线程,因此执行UI操作时,需要回到主线程。

    3.原生调用JS

     [self.webView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"jsHandleNativeResult(/%@/)",jsStr]];
    

    “jsHandleNativeResult” 为定义好的方法名

    把js需要的参数进行拼接,通过定义好的方法传给js。 

  • 相关阅读:
    区块链|学习笔记(三)
    左神算法之获取栈中最小值
    23种设计模式之适配器模式
    二叉树序列化和反序列化
    归并排序
    通过集合构建RDD或者DataFrame
    内核源码分析——shuffle
    问题
    函数参数
    问题记录
  • 原文地址:https://www.cnblogs.com/Crazy-ZY/p/7797747.html
Copyright © 2011-2022 走看看