软件里用到了加载HTML网页,也就涉及到了OC与JS的交互,在这里简单的说一下交互(运用IOS7之后新添加的库JavaScriptCore所做的交互)。
JS调用OC#
1.首先导入JavaScriptCore的库,遵循JavaScriptCore的代理
#import <JavaScriptCore/JavaScriptCore.h>
2.获取JS的上下文(写在webView的webViewDidFinishLoad方法里面)
JSContext *context = [webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
3.定义JSExport 协议(这里的协议是带参数的,如果不需要可以把参数去掉)
@protocol JSDemoExport <JSExport>
-(void)TestTowParameter:(NSString *)message1 SecondParameter:(NSString *)message2;
@end
4.然后遵循协议
@interface PlanDetailViewController ()<JSDemoExport>
5.以JSExport 协议关联control方法(位置同第2,写到初始化后边)
// 打印异常
context.exceptionHandler = ^(JSContext *context, JSValue *exceptionValue) {
// context.exception = exceptionValue;
};
context[@"control"] = self;
6.实现接收传值的方法(参数为JS端传过来的参数,即手机端需要处理的数据)
-(void)TestTowParameter:(NSString *)message1 SecondParameter:(NSString *)message2{
NSLog(@"参数一:%@,参数二:%@",message1,message2);
}
OC调用JS##
1.第一种方法,使用webView自带的stringByEvaluatingJavaScriptFromString方法
NSString *jsStr = [NSString stringWithFormat:@"document.body.style.zoom=%f",MaxSCale];
[_webView stringByEvaluatingJavaScriptFromString:jsStr];//这里是一个网页放大比例的一句JS的代码
2.第二种方法,使用JavaScriptCore库来进行JS调用
JSContext *context = [self.webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
NSString *textJS = @"showAlert('web弹窗')";
[context evaluateScript:textJS];
注意:stringByEvaluatingJavaScriptFromString是同步方法,在webView的JS方法损耗比较大的时候,可能会卡主UI。