项目需要,闲着无事,这里特来记录下JS调用原生并且给控制器传值调用方法等的操作;
步骤如下;
1. 倒入框架
#import <JavaScriptCore/JavaScriptCore.h>倒入框架(如不知道这个框架的作用,请自行查找下相关资料,这里指介绍怎么使用)
2.声明协议,相当于代理,给本控制器需要被js调用的方法写协议
@protocol JSTungExport <JSExport>
// 参数
-(void)yourMethod:(NSString *)param;
// 无参
-(void)yourMethod;
@end
3. 添加属性
JSContext *jsContext;(js的一个执行环境)
3. 在控制器中写下如下代码
class_addProtocol([yourVC class],@protocol(JSTungExport));
4. 在webview的delegate中实现js的相关方法,
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
jsContext = [self.jsWebViewvalueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
jsContext[@"params"] = self; // 此处的参数是js那边待用本地方法的前缀名,如:(params.yourMethod),(params.yourMethod:参数)
// 以上的参数与前端沟通,看他是怎么写的;
}
5. 实现方法
// 参数
-(void)yourMethod:(NSString *)param
{
}
// 无参
-(void)yourMethod
{
}
上述只讲道js调用本地方法并且传参数,oc调用js的方法传参数等比较简单,这里就不做讲解了。