美文网首页
JS与OC交互

JS与OC交互

作者: Freedom_fly | 来源:发表于2018-04-20 18:09 被阅读5次

    iOS js oc相互调用(JavaScriptCore)

    iOS js oc相互调用(JavaScriptCore)(二)

    js调用OC:
    ① 直接调用方法
    ② 通过对象调用方法

    第一种:

    -(void)webViewDidFinishLoad:(UIWebView *)webView  {  
    
        //首先创建JSContext 对象(此处通过当前webView的键获取到jscontext)  
        JSContext *context=[webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];  
        
        // MethodName是js的方法名称
        //此方法最终将打印出所有接收到的参数,js参数是不固定的 我们测试一下就知道  
        context[@"MethodName"] = ^() {  
            NSArray *args = [JSContext currentArguments];  
            for (id obj in args) {  
                NSLog(@"%@",obj);  
            }  
        };  
        //此处我们没有写后台(但是前面我们已经知道iOS是可以调用js的,我们模拟一下)  
        //首先准备一下js代码,来调用js的函数test1 然后执行  
        //一个参数  
        NSString *jsFunctStr=@"MethodName('参数1')";  
        [context evaluateScript:jsFunctStr];  
          
        //二个参数  
        NSString *jsFunctStr1=@"MethodName('参数a','参数b')";  
        [context evaluateScript:jsFunctStr1];  
          
    } 
    

    第二种

    // WebViewController.m
    @protocol JSObjcDelegate <JSExport>
    
    -(void)ShareInfo:(NSDictionary *)shareDict;
    
    @end
    
    
    @interface WebViewController ()<JSObjcDelegate>
    @property (nonatomic, strong) JSContext *jsContext;
    @end
    
    - (void)webViewDidStartLoad:(UIWebView *)webView {
            self.jsContext = [webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
            self.jsContext[@"JSObjct"] = self;  // JSObjct:JS的对象
            self.jsContext.exceptionHandler = ^(JSContext *context, JSValue *exceptionValue) {
    //          NSLog(@"异常信息:%@", exceptionValue);
            };
    }
    
    -(void)ShareInfo:(NSDictionary *)shareDict {
        if (shareDict.count) {
            // ...
        }
    }
    

    相关文章

      网友评论

          本文标题:JS与OC交互

          本文链接:https://www.haomeiwen.com/subject/vlgakftx.html