iOS开发实践之UIWebView

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 οnclick="fn_open_camera();">拍照</button>
    </div>
    <p></p>
    <div>
        <button οnclick="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://justsee.iteye.com/blog/2036713




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值