iOS UIWebView中Objective-C与Javascript的深层交互(三)

       上篇文章中讲述了如何通过代码直接用JavaScript调用Objective-C方法,本文通过另一种思路实现,即通过稍微复杂的一种方法,即通过一个对象来调用方法,该方法通过实现一个协议来操作,即JSExport协议

       JSEXport,凡是添加了JSEXPort协议的协议,所规定的方法,变量等,就会对JS开放,我们都可以通过JS的类调用到。

比如:JS方法为account.account('参数'),我们在OC中添加的代理方法为:-(void)account:(nsstring *)account;

如果js是多个参数的话  我们代理方法的所有变量前的名字连起来要和js的方法名字一样,

例如: js方法为 :testobject.TestTowParameterSecondParameter('参数A','参数B') 
他有两个参数 那么我们的代理方法 就是把js的方法名 TestTowParameterSecondParameter 任意拆分成两段作为代理方法名(此处我们拆分为 TestTowParameter 和 SecondParameter ) 那么我们的代理方法就是

-(void)TestTowParameter:(NSString *)message1 SecondParameter:(NSString *)message2; 
我们看代理方法有两个变量别名
TestTowParameter 和 SecondParameter
他两个拼接起来就刚好是我们js的方法名,这部分是参考别人博客看的功能,没有实际操作,读者若有需要,可以自己尝试下。


下边详细讲述下操作

1:首先创建一个类,继承与NSObject,规定一个协议,在该类中导入头文件#import <JavaScriptCore/JavaScriptCore.h>  

    1.1:创建协议 
    #import <JavaScriptCore/JavaScriptCore.h> 
  / /首先创建一个实现了JSExport协议的协议  
   @protocol JSObjectProtocol <JSExport>  
 
  //此处我们测试几种参数的情况  
  -(void)JSNOParamr;  
  -(void)JSOneParameter:(NSString *)message;  
  -(void)JSTwoParameter:(NSString *)message1 SecondParameter:(NSString *)message2;  

 
@end  
 

//让我们创建的类实现上边的协议  
@interface TestJSObject : NSObject<JSObjectProtocol>  
 
@end 

.m文件为对应的实现

2:具体的调用

还是和之前的一样,首先创建JSContext对象:   

JSContext *context=[webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];  
js是通过对象调用的,我们假设js里面有一个对象 jsCallOC在调用方法  
  首先创建我们新建类的对象,将他赋值给js的对象 
JSObjectProtocol * ocJs = [[JSObjectProtocol alloc]init];

context[@"jsCallOC"] = ocJS//该处代码将我们自己实现了协议的类的对象赋值给js的类,让js的类通过方法调用,

这个时候可以执行js的代码了,js中的对象名字要和该名称相同,不然没法调用,这个时候在oc的类中打断点,会发现掉用来该方法,如是,则实现了另外一种JavaScript调用Objective-C的方法

  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值