使用JSContext 实现 UIWebView 和 JS 相互调用
- 要使用JSContext 必须在工程中加入
JavaScriptCore.framework
依赖库
在使用的位置导入#import <JavaScriptCore/JavaScriptCore.h>
2.创建一个 protocol 文件 遵循<JSExport>
协议 声明一些JS将会调用的function
3.UIWebView 加载link 设置代理并且 实现代理内部的方法(……)
4.在加载UIWebView的控制器中 实现刚才创建的协议 并且实现协议中的方法
eg:@interface ViewController ()<UIWebViewDelegate,JSObjcDelegate>
-(void)onAdReady{
NSLog(@"%s",__func__);
}
-(void)textFunction2{
NSLog(@"%s",__func__);
}
-
OC 调用 JS function
方式1 :[webView stringByEvaluatingJavaScriptFromString:@"funcName()"];
方式2 : 在WebView 的代理中 ```- (void)webViewDidFinishLoad:(UIWebView *)webView { //获取 js中的上下文 self.jsContext = [self.secondWebView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"]; //给JS中调用OC方法的对象赋值 self.jsContext[@"yilian"] = self; self.jsContext.exceptionHandler = ^(JSContext *context, JSValue *exceptionValue) { context.exception = exceptionValue; NSLog(@"异常信息:%@", exceptionValue); }; //获取js中方法的名称 JSValue *JSfunc =self.jsContext[@"funcName"]; //js 执行方法 [JSfunc callWithArguments:nil]; }```
js 调用OC 中的 function
- (void)webViewDidFinishLoad:(UIWebView *)webView{
//获取 js中的上下文
self.jsContext = [self.secondWebView
valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
//给JS中调用OC方法的对象赋值
self.jsContext[@"yilian"] = self;
self.jsContext.exceptionHandler = ^(JSContext *context, JSValue *exceptionValue) {
context.exception = exceptionValue;
NSLog(@"异常信息:%@", exceptionValue);
};
//获取js中方法的名称
JSValue *JSfunc =self.jsContext[@"funcName"];
//js 执行方法
[JSfunc callWithArguments:nil];
}
1.给调用对象赋值
2.在协议中声明 js 需要调用的方法
3.在控制器中遵循 协议并且实现协议中的方法