现在APP的开发已经不局限于原生开发,很多都是原生+html5这种混合开发
我们可以通过webView这个控件,实现混合开发。
1.首先你需要创建一个html页面
<html> <head> <meta charset="utf-8"> <title>第一个页面</title> </head> <script> function login() { location.href = 'ddz://call_?200'; } </script> <body> <button style="background: blue; width:100px; height:30px" onclick="login()">确定</button> <br> <a href="http://www.baidu.com">百度</a> </body> </html>
在app初始化时,加载这个页面
- (void)viewDidLoad { [super viewDidLoad]; [self.webView loadRequest:[NSURLRequest requestWithURL:[[NSBundle mainBundle] URLForResource:@"index" withExtension:@"html"]]]; }
2.实现UIWebViewDelegate这个协议
利用stringByEvaluationgJavaScriptFromString这个协议方法,
可以完成OC调用JS
#pragma mark - <UIWebViewDelegate> - (void)webViewDidFinishLoad:(UIWebView *)webView { [webView stringByEvaluatingJavaScriptFromString:@"alert(100)"]; }
3.
利用shouldStartLoadWithRequest这个方法可以完成JS调用OC
/** * 通过这个方法完成JS调用OC * 第三方框架 :WebViewJavaScriptBridge */ - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { //url = ddz://sendMessage_?200 NSString *url = request.URL.absoluteString; NSString *scheme = @"ddz://"; if ([url hasPrefix:@"ddz://"]) { NSLog(@"调用OC的方法"); //获得协议后面的路径 path = sendMessage_?200 NSString *path = [url substringFromIndex:scheme.length]; //利用?进行切割 NSArray *subpaths = [path componentsSeparatedByString:@"?"]; //方法名 methodName = sendMessage: NSString *methodName = [[subpaths firstObject] stringByReplacingOccurrencesOfString:@"_" withString:@":"]; //参数 params = 200 NSString *params = [subpaths lastObject]; [self performSelector:NSSelectorFromString(methodName) withObject:params]; // NSLog(@"%@",subpaths); return NO; } NSLog(@"想加载其他请求,不是想调用OC的方法"); return YES; }
4.
在github上也找到了一个 oc 和 js 之间能够交互的类,可以看一下 https://github.com/marcuswestin/WebViewJavascriptBridge