今日刚到一家公司, 老讨论什么JS OC交互的事情,看demo里面用的好老,前端人员是根安卓约定的, 到我们这边一大团还要转换,反正看的我一脸懵逼, 就亲自弄了个html拿来与OC交互。
OC调用JS挺方便的,直接加载出来web页
NSString *pathStr = [[NSBundle mainBundle] pathForResource:@"jsoc" ofType:@"html"];
UIWebView *webView = [[UIWebView alloc] initWithFrame:self.view.frame];
[webView loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:pathStr]]];
webView.delegate = self;
[self.view addSubview:webView];
OC调用JS,测试demo
// oc调用js方法
// [self.jsContext evaluateScript: @"hide('oc掉jsalert方法')"];
// oc掉js方法
[webView stringByEvaluatingJavaScriptFromString:@"hide()"];
JS调用OC,通过代理(使用代理时协议要遵循JSExport协议)和block两种。详情看demo在下方。
self.jsContext = [webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
/**
* 此处将oc中得self传给js对象,jsContext的[@"show"],这个show任意定义,但是在js中用的时候必须用此一样的名字,来调用我们oc中协议的方法例如上面的hide123,在js中此例子是通过了button的点击方法出发这个协议中得 方法,
*/
// js掉oc方法一 通过代理
self.jsContext[@"show"] = self;
// 方法二通过block
__weak typeof(self) weakSelf = self;
self.jsContext[@"hide"] = ^() {
[weakSelf loggg];
};
废话不多说
网友评论