JS与OC交互

原博,也是本人博客

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) {
        // ...
    }
}

你可能感兴趣的:(OC笔记)