iOS笔记 js 交互

今天碰到了js调用oc oc调用js的需求 为了方便查阅, 记录一下

js 调用OC 

#import <JavaScriptCore/JavaScriptCore.h>

- (void)webViewDidFinishLoad:(UIWebView *)webView

{

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

    context[@"save"] = ^() {

        // js调用的OC代码

        NSLog(@"a");

        NSArray *args = [JSContextcurrentArguments];//参数数组

        for (id objin args) {

            NSLog(@"%@",obj);

        }

        [selfsaveUserID:args[0]];

        

    };


}



js方法为


    function NsLogin(param_userid){

        save(param_userid);

    }


这里需要注意一下, context中的代码块如果添加弹出界面的方法会报错,据我推断原因应该是context的block是在子线程执行的,如果需要更新UI的操作,需要吧更新UI的代码放到主线程中:

 

    context[@"save"] = ^(){

       

        dispatch_sync(dispatch_get_main_queue(), ^{

            // 主线程更新界面不然报错

                     

        });

        

        

    };


        



当调用js代码时会执行上面oc代码块中的代码 通过  NSArray  *args = [ JSContext   currentArguments ]; 获取参数数组

OC 调用 JS 

执行下列代码调用 js中的 NsLogin方法并给它传参数'10'

 NSString *alertJS=@"NsLogin('10')";//准备执行的js代码

 [context evaluateScript:alertJS];

发现当js调用oc的方法之后就不会再走js内部的方法, 不知道是不是我的问题, 写的有什么不对的地方欢迎指正


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值