总结: OC调用JS方法和给JS赋值


首先说明一下 :
后台经常会给到我们这样的 JS 方法 :app.exit ();
app.logout ();
save ( cardno );    等类似的方法


这类方法我们可以通过实现了 JSExport 协议来调用它;
首先创建 <NSObject> 
.H 文件中写 :

#import <Foundation/Foundation.h>
#import <JavaScriptCore/JavaScriptCore.h>

// 首先创建一个实现了 JSExport 协议的协议
@protocol JSMutualDataProtocol <JSExport>

// 退出登录
- ( void ) logout ;

@end


// 退出登录协议
@protocol LogOutDelegate <NSObject>

- ( void ) logout ;

@end



@interface JSMutualData : NSObject<JSMutualDataProtocol>

@property ( nonatomic , weak ) id<LogOutDelegate>logOutDelegate ;   // 退出登录协议
@end



.M 文件写 :

// 退出登录
- ( void ) logout
{
     [ _logOutDelegate logout ];
}


最后去 webView 控制器页面实现当前协议

签协议 <LogOutDelegate>
然后在
WebViewDidFinishLoad  方法中实现如下方法 :

 // 首先创建 JSContext  对象(此处通过当前 webView 的键获取到 jscontext
    JSContext *context= [ webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext" ];
    
    //JS 方法,通过对象方法获取点击方法
    JSMutualData *MutualData =  [[ JSMutualData alloc ] init ];
    context [ @"app" ]  = MutualData ;
     [ MutualData setLogOutDelegate: ( id<LogOutDelegate> ) self ];

最后实现类方法:
-(void)logout
{
NSLog(@"````````````logout");
}



还有上面提到的 save ( cardno );    这样的方法,可以通过stringByEvaluatingJavaScriptFromString 方法给cardno赋值

方法如下:
- (void)WebViewDidFinishLoad:(UIWebView *)webView
{
[webView stringByEvaluatingJavaScriptFromString:@"save('12345');"];
}
这样就可以给JS中的 save ( cardno ); 方法赋值了,很好用


还有另外后台给的方法: app.onLogin(mm,bb);
通过JS方法获得mm , bb的值

还是上面那个方法一样的, 可以通过JSExport协议 得到值

之前 // 退出登录
- ( void ) logout ; 方法
换成下面这个方法:
//获取登录账号和密码
-(void)on:(NSString *)account Login:(NSString *)password;

.m文件写:
-(void)on:(NSString *)account Login:(NSString *)password
{
[_LoginDelegate on:account Login:password];
}

然后去webView控制器上面签协议,写方法就可以了


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值