🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
**1、什么是UIWebView** UIWebView是iOS内置的浏览器控件。 系统自带的Safari浏览器就是通过UIWebView实现的。 UIWebView不但能加载远程的网页资源,还能加载绝大部分的常见文件html\htm、pdf、doc、ppt、txt、mp4等等。 **2、常用属性和方法** ~~~ @property(nonatomic) UIDataDetectorTypes dataDetectorTypes //需要进行检测的数据类型 @property(nonatomic,readonly,getter=canGoBack) BOOL canGoBack;//是否能回退 @property(nonatomic,readonly,getter=canGoForward) BOOL canGoForward;//是否能前进 @property(nonatomic,readonly,getter=isLoading) BOOL loading;//是否正在加载中 @property(nonatomic) BOOL scalesPageToFit;//是否伸缩内容至适应屏幕当前尺寸 ~~~ ~~~ - (void)loadRequest:(NSURLRequest *)request; //UIWebView常用的加载资源的方法 - (void)reload; //重新加载(刷新) - (void)stopLoading; //停止加载 - (void)goBack;//回退 - (void)goForward; //前进 ~~~ **3、UIWebViewDelegate代理方法** ~~~ //开始发送请求(加载数据)时调用这个方法 - (void)webViewDidStartLoad:(UIWebView *)webView; //请求完毕(加载数据完毕)时调用这个方法 - (void)webViewDidFinishLoad:(UIWebView *)webView; //请求错误时调用这个方法 - (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error; //UIWebView在发送请求之前,都会调用这个方法,如果返回NO,代表停止加载请求,返回YES,代表允许加载请求 - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType; ~~~ **4、UIWebView Obj-c 和javascript交互** 4.1、Obj-c 操作javascript,dom加载完成后才操作。 ~~~  - (nullable NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script; ~~~ ~~~ //与js交换,操作dom NSString *hideDiv = @"document.getElementById('showText').style.display='none'"; ~~~ 4.2、javascript调用oc方法。原理是UIWebView拦截页面请求,截取url判断做响应处理。 ~~~ /** * 作用:一般用来拦截webView发出的所有请求(加载新的网页) * 每当webView即将发送一个请求之前,会先调用这个方法 * * @param request 即将要发送的请求 * * @return YES :允许发送这个请求 NO :不允许发送这个请求,禁止加载这个请求 */ -(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{ // URL格式:协议头://主机名/路径 // request.URL.path : 获得的仅仅是主机名(域名)后面的路径 // request.URL.absoluteString : 获得的是一个完整的URL字符串 // NSString *url = request.URL.absoluteString; // 如果在path中找不到@“baidu”这个字符串 // [path rangeOfString:@"baidu"].length == 0; // [path rangeOfString:@"baidu"].location == NSNotFound //if([urlStr rangeOfString:@"baidu.com"].length ==0){} NSString *url = request.URL.absoluteString; NSRange range = [url rangeOfString:@"zxh://"]; NSInteger loc = range.location; if (loc != NSNotFound) { //获取方法名字 NSString *method = [url substringFromIndex:loc+ range.length]; // 转成SEL SEL sel = NSSelectorFromString(method); [self performSelector:sel withObject:nil]; } return YES; } ~~~ **页面代码:** ~~~ <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> </head> <body> <p></p> <div> <button onclick="fn_open_camera();">拍照</button> </div> <p></p> <div> <button onclick="fn_call();">打电话</button> </div> <div id="showText">dddddddd</div> <script> function fn_call() { // 调用OC中call方法 window.location.href = 'zxh://call'; } function fn_open_camera() { // 调用OC中openCamera方法 window.location.href = 'zxh://openCamera'; } </script> </body> </html> ~~~ **5.JavaScriptCore.framework iOS自带框架实现与js交互,参考一下文章** [http://blog.csdn.net/lwjok2007/article/details/47058795](http://blog.csdn.net/lwjok2007/article/details/47058795) [http://justsee.iteye.com/blog/2036713](http://justsee.iteye.com/blog/2036713)