方法有好几种,现在知道的话,是三种比较好
一、url截取的方式
- OC调用JS
与h5端协商好协议,在- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
方法中接入request的url,来进行判断,调用native的方法。 - JS调用OC
NSString *jsStr = [NSString stringWithFormat:@"showAlert('%@')",@"这里是JS中alert弹出的message"];
[self.webView stringByEvaluatingJavaScriptFromString:jsStr];
二、使用库JavaScriptCore
在iOS 7之后,apple添加了一个新的库JavaScriptCore,用来做JS交互,因此JS与原生OC交互也变得简单了许多。
首先导入JavaScriptCore库, 然后在OC中获取JS的上下文
- JS调用OC
- (void)webViewDidFinishLoad:(UIWebView *)webView {
//JS调用OC的方法
JSContext *context = [self.webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
context [@"onClickOC"] = ^(NSString *string) {
NSLog(@"onClickOC == %@",string);
dispatch_async(dispatch_get_main_queue(), ^{
//在block中,要回到主线程刷新界面
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"方式二" message:@"这是OC原生的弹出窗" delegate:self cancelButtonTitle:@"收到" otherButtonTitles:nil];
[alertView show];
});
};
}
- OC调用JS
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
//OC调用JS的方法
JSContext *context = [self.webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
//准备执行的js代码 test js OC 是传给js的参数,(字符串是单引号)
NSString *alertJS = @"showAlert('OC调用JS的方法')";
//通过oc方法调用js的alert
[context evaluateScript:alertJS];
}
以上参考文章:
https://www.jianshu.com/p/d19689e0ed83
三、WKWebView
参考文章:
https://www.jianshu.com/p/e09305d90fba
https://www.jianshu.com/p/99c3af6894f4