iOS webView中JavaScript打开原生ViewController(升级版)

简单粗暴, 直接上代码。

1、导入头文件    #import<JavaScriptCore/JavaScriptCore.h>

2、webView加载完成的代理方法

-(void)webViewDidFinishLoad:(UIWebView *)webView

{

    //取到 JSContext对象(通过当前webView的键获取到JScontext

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


    //web开发者直接调用 toNativeVc() 这个函数即可, 参数不限个数, 我的项目中传的是一个object。

     ({"vcName":"需要打开的ViewController的类名", "paramName":"参数名", "paramValue":"参数值"} ,如上一篇博客中的打开详情页 {"vcName":"FFNewDetailViewController", "paramName":"goodsid", "paramValue":"121"})


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

//js传过来的参数列表

NSArray * args = [JSContextcurrentArguments];


        id vcName = [NSStringstringWithFormat:@"%@", args[0][@"vcName"]];

        id paramName = [NSStringstringWithFormat:@"%@", args[0][@"paramName"]];

        id paramValue = [NSStringstringWithFormat:@"%@", args[0][@"paramValue"]];

[selftoNativeControllerWithControllerName:vcNameandParamName:paramName andParamValue:paramValue];

    };

}

3、跳转至原生viewController的方法

-(void)toNativeControllerWithControllerName:(NSString *)controllerName andParamName:(NSString *)paramName andParamValue:(NSString *)paramValue

{

    //根据类名的字符串得到类

    Class controllerClass = NSClassFromString(controllerName);

    //创建类的对象

    id viewController = [[controllerClassalloc] init];

    

    //将参数名转换成set函数

    paramName = [paramName stringByReplacingCharactersInRange:NSMakeRange(0,1)withString:[[paramName substringToIndex:1]uppercaseString]];

    SEL setParam =NSSelectorFromString([NSStringstringWithFormat:@"set%@:", paramName]);

    

    dispatch_async(dispatch_get_main_queue(), ^{

        if([viewControllerrespondsToSelector:setParam])

        {

    //执行set方法给参数赋值

            [viewController performSelector:setParamwithObject:paramValue];

        }

        [self.navigationController pushViewController:viewControlleranimated:YES];

    });

}


以上的例子中, 只带了一个参数,若需要带多个参数, 则可以将参数名作为key, 参数值为value。 然后在原生方法中进行遍历解析即可。

{"vcName":"FFViewController", "param":{"goodsid":"101", "color":"red", "age":"5"}} 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值