OC与JS交互

软件里用到了加载HTML网页,也就涉及到了OC与JS的交互,在这里简单的说一下交互(运用IOS7之后新添加的库JavaScriptCore所做的交互)。

JS调用OC#

1.首先导入JavaScriptCore的库,遵循JavaScriptCore的代理
#import
2.获取JS的上下文(写在webView的webViewDidFinishLoad方法里面)

JSContext *context = [webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];

3.定义JSExport 协议(这里的协议是带参数的,如果不需要可以把参数去掉)

@protocol JSDemoExport 
-(void)TestTowParameter:(NSString *)message1 SecondParameter:(NSString *)message2;
@end

4.然后遵循协议

@interface PlanDetailViewController ()

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。

你可能感兴趣的:(OC与JS交互)