1.OC调用JS方法:
NSString *shareMethod = @"share('参数1')";
[_webView stringByEvaluatingJavaScriptFromString:shareMethod];
2.JS调用OC的方法:
js调用oc的方法分两种方式:
第一种方式——直接调用
-(void)webViewDidFinishLoad:(UIWebView *)webView
{
//网页加载完成调用此方法
//创建JSContext 对象
JSContext *jsContext = [webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
//js调用iOS
//第一种情况
//其中test1就是js的方法名称,赋给是一个block 里面是iOS代码
//此方法最终将打印出所有接收到的参数,js参数是不固定的
jsContext[@"test1"] = ^() {
NSArray *args = [JSContext currentArguments];
for (id obj in args) {
NSLog(@"%@",obj);
}
};
//模拟一下OC调用JS,首先准备一下js代码,来调用js的函数test1 然后执行
//一个参数
NSString *jsTestStr = @"test1('参数1')";
[jsContext evaluateScript:jsTestStr];
//二个参数
NSString *jsTestStr1 = @"test1('参数1','参数2')";
[jsContext evaluateScript:jsTestStr1];
}
第二种方式——通过一个对象来调用方法
这种方式需要使用到JSExport
协议
凡是遵守了JSExport
协议的的协议所规定的方法就会对js开放,我们就可以通过js调用到这些方法或变量
首先:创建一个继承于NSObject
的类:JSNativeMethod
;
其次:导入JavaScriptCore
库,声明一个遵循于JSExport
协议的协议,在这个协议里声明我们的交互方法,然后遵循于我们自定义的协议;
最后:在.m文件中实现相应的js交互方法。
具体实现实例如下:
JSNativeMethod.h文件
#import <JavaScriptCore/JavaScriptCore.h>
@protocol JSObjectProtocol <JSExport>
/**
获取用户信息(有返回值的)
@param userId 用户ID
*/
- (NSString *)getUserInfo;
/**
分享(无返回值,有参数)
@param jsonStr <#jsonStr description#>
*/
- (void)share:(NSString *)jsonStr;
@end
@interface JSNativeMethod : NSObject<JSObjectProtocol>
@end
JSNativeMethod.m文件
#import "JSNativeMethod.h"
@implementation JSNativeMethod
#pragma mark - 获取用户信息
- (NSString *)getUserInfo {
return @"userInfo";
}
#pragma mark - 分享
- (void)share:(NSString *)jsonStr {
DLog(@"分享:%@",jsonStr);
}
@end