我们接着来聊一聊JS与OC交互的那些事儿。
上一篇只介绍的了JS调用OC的方法:
JS与OC交互大总结之一 JS调用OC
这一篇聊聊OC调用JS的方法:
示例代码:
LZBWebViewWithJSInteractive github下载链接
OC调用JS的方法###
第一种:
利用WebView的stringByEvaluatingJavaScriptFromString方法调用JS代码
第二种:
利用系统框架<JavaScriptCore/JavaScriptCore.h>的JSContext 类的evaluateScript调用JS的方法
详细解说###
1、利用stringByEvaluatingJavaScriptFromString方法,这个比较简单,我们也在经常使用,就是把需要的JS代码写入到WebView的JS运行环境中
NSString *param = @"OC调用JS参数http://www.jianshu.com/users/d21698127416/latest_articles"; //写入JS的参数
//调用JS的callJS方法,并且传入param参数,这里要注意参数使用的是单引号‘’
NSString *js = [NSString stringWithFormat:@"callJS('%@')",param];
//把JS传入WebView的运行环境中
NSString *string = [self.webView stringByEvaluatingJavaScriptFromString:js];
JS端的核心代码:
<script type="text/javaScript">
function callJS(param) //函数实现callJS
{
alert(param);
}
</script>
2、利用系统框架实现
使用的步骤:
① 加载网页,我这里是示例是加载本地的html
NSString *path = [[NSBundle mainBundle] pathForResource:@"OCtoJStwoIndex.html" ofType:nil];
NSURL *localURL = [[NSURL alloc]initFileURLWithPath:path];
[self.webView loadRequest:[NSURLRequest requestWithURL:localURL]];
② 获取webView的运行环境对象,其实我们很多操作都是围绕着它来的
//获得WebView的运行环境的对象
JSContext *context = [self.webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
③ 定义调用JS方法的字符串,如果有参数可以传入参数
//调用方法(注意:这里是JS里面的定义的方法)
NSString *callJSstring = @"sendJSString('参数:OC call JS test 子木')";
注意:参数还是单引号
④ 利用JSContext的对象方法- (JSValue *)evaluateScript:(NSString *)script;把JS的字符串写入到运行环境中
[context evaluateScript:callJSstring];
这样就利用苹果框架实现OC调用JS,比较简单吧!
小结一下###
OC调用JS两个方法:
1、stringByEvaluatingJavaScriptFromString方法
2、 JSContext 的 (JSValue *)evaluateScript:(NSString *)script方法
最后赠言###
star 是对我最大的鼓励