JS与OC交互

本文介绍了两种iOS调用JavaScript的方法:直接调用和通过对象调用。直接调用方法适用于简单场景,通过对象调用则提供了更灵活的方式,并展示了如何在iOS应用中设置JSContext并实现跨语言调用。

原博,也是本人博客

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) {
        // ...
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值