您的位置:首页 > Web前端 > JavaScript

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

2017-07-07 17:45 405 查看
首先说明一下:
后台经常会给到我们这样的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控制器上面签协议,写方法就可以了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: