JS调用OC的理解与总结

首先声明,在这里我只是谈谈对JS调用OC方法的两种方式的理解,并不涉及具体实现,

至于实现的代码网上可以搜到很多。我认为学习任何东西,对概念的理解是应该放在首位的,

有些东西你“吃不透“,主要还是没理解它的概念的缘故。

一.

通过URL截取来调用OC方法:

这种方式中,JS进行跳转的URL可以看成是为OC在JS中注册了一个方法,相当于OC中对应方法的声明。

而OC中通过截取URL获得方法名跟参数,对注册的方法进行实现;

最后在OC中通过perform:selector 调用实现的方法;

总结此方法的整个流程是:JS注册方法名及参数(如果有的话),将方法名跟参数传递给OC,OC实现注册的方法,OC调用OC方法,

其实质还是OC调用OC方法,只不过重要的是JS传递过来的参数,可能是我们所需要的。

由于是在OC中通过perform:selector调用的方法,方法名都是次要的,笔者觉得在OC中定义一个跟URL具有相同多个参数的方法都是可行的。

该方法中URL会有两个方向的用处:(1)可以不进行页面跳转,而只是单纯的触发或者说调用OC中实现的OC方法;

(2)进行跳转,同时执行OC中实现的方法;

二.

JS直接调用OC中的方法;

我之前有发过一篇有关这种方式帖子,具体讲解的实现过程,具体细节可以参看那一篇博文。

之前我的项目的需求是:进行页面跳转时JS触发一个方法,比如paySuccess(),以此来调用OC中的方法,JS中只是注册了一个paySuccess的方法,

它的函数体是空的;当js触发该方法时执行的是 OC中通过对js中context属性进行配置, 而得到的“函数体”。

这个过程由于是动态的页内跳转,所以需要实现WebView的代理方法对网页加载进行监听,通过尝试发现OC对JS方法进行配置的时间切入点是关键;

因为动态加载网页时,OC的配置如果在网页还没有加载完成时配置,由于JS对方法的注册还没有完成,所以不会成功;

如果加载完成之后进行配置,由于网页在加载完成的瞬间会自动触发paySuccess(),而如果我们在webView的加载完成的代理方法中进行配置,开始配置之前其实

paySuccess()方法已经出发了,所以也是失败的。

后来笔者在上边步骤的接触上,在配置完成后通过OC调用JS的方法主动执行JS中触发paySuccess()的时候,结果竟然成功了。

花了这么多口水讲述了我的代码的整个实现的过程,主要是想有利于读的人能很好的理解其中的奥妙。

相信仔细体会,能给大家带来很大收益。

最后说一下JS直接调用OC中的方法的大概流程:

首先js中定义一个具有空的函数体的方法 function paySuccess{logout()};

然后在OC中对JS中的context[logout]=^{ 配置需要执行的OC 代码 };

最后通过[webViewstringByEvaluatingJavaScriptFromString:@"paySuccess();"];

触发JS方法,调用OC中的代码。

通过上边的具体阐述,相信能让大家对JS调用OC中的方法,或者更准确的说执行OC中的代码,能有一个清晰的掌握。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值