iOS开发之UIWebView(二)

前面对UIWebView的简单使用做了些介绍,下面进一步介绍UIWebView。我们可以利用UIWebView在网页加载过程中对网页做一些操作。这里用到了javascript脚本语言。下面我们就在一个.html文件的源代码中做一些修改,以达到某些操作(这里是删除一些内容)。在HTML源代码中添加如下代码

<script type="text/javascript">
 function removeAd()
 {
 // getElementsByTagName可能会获得很多footer标签
 // 根据标签删除
 document.getElementsByTagName('footer')[0].remove();
 document.getElementsByTagName('header')[0].remove();
 
 // 根据id删除
 // document.getElementsById('')
 }
 </script>
 <br>
 <input type="button" value="去除广告" οnclick="removeAd();">
 <br>

编辑完,保存。利用网页打开该网页,会出现如下按钮:

上面就是要被删除的部分。点击该按钮,内容就会被删除。如下

但这要修改源代码才能做到,那么我们如何利用UIWebView在网页正在加载的过程中去删除内容呢。使用如下代码即可:

-(IBAction)removeAd:(id)sender {

   

    // 拼接javascript代码

    // 弹框

//    [self.webView stringByEvaluatingJavaScriptFromString:@"alert(10);"];

   

    // 移除广告操作(拼接javascript代码)

    [self.webViewstringByEvaluatingJavaScriptFromString:@"document.getElementsByTagName('footer')[0].remove();"];
}
运行效果:

      

这样就做到了在OC中使用javascript代码做一些操作了。

上面是介绍在OC中使用javascript代码,那下面就介绍如何在javascript中调用OC代码,如:网页中有一个按钮“打开相册”,点击按钮,就打开手机相册。

HTML源代码如下:

<html>
    
    <head>
        <title>测试标题</title>
        <meta http-equiv="Content-Type" content="text/html"; charset="UTF-8">
    </head>
    
    <body>
<!--        一点击按钮,就会调用script中的openAlbum函数,webView就加载ios://openMyAlbum(随便写的)远程资源-->
        <input type="button" value="打开相册" οnclick="openAlbum();">
    </body>
    
    <script type="text/javascript">
        function openAlbum()
        {
           window.location.href = 'ios://openMyAlbum';
        }
    </script>
    
</html>

在OC中,我们利用代理监听webView加载过程,在代理方法中,拦截请求(该请求的作用只是用于标示作用),判断请求,再调用方法,打开手机相册。

- (void)loadTestHtml {
    // 加载本地资源的URL路径
    NSURL *url = [[NSBundle mainBundle] URLForResource:@"Test.html" withExtension:nil];
    NSURLRequest *reqeust = [NSURLRequest requestWithURL:url];
    
    // 设置webView的代理
    self.webView.delegate = self;
    // 加载资源
    [self.webView loadRequest:reqeust];
}

#pragma mark - UIWebViewDelegate
/**
 *  webView在发生请求request之前,会调用该方法,询问是否可以加载该请求request,YES:可以加载,NO:不可以加载
 */
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
    
    NSString *url = request.URL.absoluteString;
    
    NSRange range = [url rangeOfString:@"ios://"];
    
    
    if (range.length != 0) {// 有ios://openMyAlbum远程加载请求,告诉应用打开相册
        
        NSString *method = [url substringFromIndex:range.location + range.length];
        
        // 打开相册
        // 将字符串转换成方法名
        SEL selector = NSSelectorFromString(method);
        
        [self performSelector:selector withObject:nil];
        
        return NO;// 不允许这次请求通过
    }
    
    return YES;
    
}

/**
 *  打开相册
 */
- (void)openMyAlbum {
    
    // 创建相册控制器
    UIImagePickerController *ipc = [[UIImagePickerController alloc] init];
    
    // 图片来源:相册
    ipc.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;
    
    // 跳转至相册控制器
    [self presentViewController:ipc animated:YES completion:nil];
    
}

运行效果:

OC中调用javascript代码,javascript中调用OC方法,这样就实现了OC和javascript的交互。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值