主要代码:
#import "ViewController.h"
#import <JavaScriptCore/JavaScriptCore.h>
#import "JavaScriptMethodsDelegate.h"
@interface ViewController ()<UIWebViewDelegate,JavaScriptMethodsDelegate>
@property (weak, nonatomic) IBOutlet UIWebView *webView;
@property(nonatomic,strong)JSContext *jsContext;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// 加载本地html文件
NSURL *fileURL = [[NSBundle mainBundle] URLForResource:@"test.html" withExtension:nil];
[self.webView loadRequest:[NSURLRequest requestWithURL:fileURL]];
}
-(void)webViewDidFinishLoad:(UIWebView *)webView {
self.jsContext = [webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
self.jsContext[@"OC"] = self;
self.jsContext.exceptionHandler = ^(JSContext *context, JSValue *ex){
context.exception = ex;
NSLog(@"异常信息%@",ex);
};
}
- (void)transferOC1 {
NSLog(@"调用OC1");
}
- (IBAction)callBackJS1:(id)sender {
JSValue *callBack = self.jsContext[@"callback1"];
[callBack callWithArguments:@[@"哈哈"]];
}
- (void)transferOC2:(NSString *)json {
NSLog(@"%@",json);
}
- (IBAction)callBackJS2:(id)sender {
JSValue *callBack = self.jsContext[@"callback2"];
[callBack callWithArguments:nil];
}
- (void)transferOC3:(NSString *)json Data:(NSString *)data {
NSLog(@"%@,,,,,,,%@",json,data);
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
JavaScriptMethodsDelegate.h
#import <JavaScriptCore/JavaScriptCore.h>
@protocol JavaScriptMethodsDelegate <JSExport>
- (void)transferOC1;
- (void)transferOC2:(NSString *)json;
/**
*JS调用OC方法,需要拼接方法名 transferOC3Data(‘’,‘’);
*/
- (void)transferOC3:(NSString *)json Data:(NSString *)data;
@end
test.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<div>
<h1>OC和JavaScript交互</h1>
</div>
<div>
<input type="button" value="调用OC1" οnclick="OC.transferOC1()">
<input type="button" value="调用OC2" οnclick="transferOC2()">
<input type="button" value="调用OC3" οnclick="transferOC3Data()">
</div>
<script>
var json = JSON.stringify({"name":"ykj"});
var transferOC2 = function() {
OC.transferOC2(json);
}
var transferOC2 = function() {
OC.transferOC3Data(json,json);
}
var callback1 = function(info) {
alert(info);
}
var callback2 = function(){
alert("成功");
}
</script>
</body>
</html>
我的业余技术微信公众号:YKJGZH,欢迎大家进入