iOS开发-截获html按钮点击事件,实现js调用native代码

本文介绍了如何在iOS应用中,当用户点击WebView内的HTML按钮时,如何截获事件并调用Native代码。首先,需要在HTML端设置点击事件,并通过特定URL格式传递参数。然后,在iOS的webView代理方法`shouldStartLoadWithRequest`中监听URL,解析参数,并根据参数执行相应的Native代码。最后,阻止webView的默认页面跳转行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在上一篇文章地址(http://blog.csdn.net/jp940110jpjp/article/details/48223975)中我介绍了如何在webView上添加头部与尾部原生控件,今天为大家简要说明一下如何点击webView上的控件之后调用native代码:

1.首先要web端与你做好配合

比如你点击某个btn的响应事件,

function showCamera(toast,params) {
    var url = "iostest|"+productId+"|"+"http://s.click.taobao.com/2izBYsx";
    document.location.href = url;
}

2.webView的代理时间里监听所有的URL

正常情况下,他会相应所有的url并执行页面跳转,所以我们要在这个代理方法里找到这个特殊的url,使其不执行页面的跳转

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{
  
        NSString *requestString = [[[request URL] absoluteString] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

tip:对1中的url用“|”进行分割成数组

        NSArray *components = [requestString componentsSeparatedByString:@"|"];
        NSLog(@"=components=====%@",components);
        if ([requestString rangeOfString:@"iostest"].length>=1) {
            NSString *idStr = components[1]; //获取商品ID
            NSString *productStr = components[2];//获取商品URL
            

/*这里是因为楼主的服务器整个过程采用的GBK编码可以不用理会
            NSStringEncoding gbkEncoding = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);
           productStr =  [productStr stringByAddingPercentEscapesUsingEncoding:gbkEncoding];
            NSLog(@"=pageSource===%@",[productStr stringByAddingPercentEscapesUsingEncoding:gbkEncoding]);
 */           
            JPProductDetailVc *v =[[JPProductDetailVc alloc]init];
            NSLog(@"=productStr==%@",productStr);
            if ([productStr rangeOfString:@"redirect"].length>=1) {

/*这里是因为URL是一个跳转URL,里边还包含的有http://所以楼主在这里做了一些特殊的处理,可以不用理会
                NSString *subStr1 = [productStr substringFromIndex:50];
                NSString *subStr2 = [productStr substringToIndex:50];
                NSLog(@"subStrrr===%@==%lu",subStr1,(unsigned long)[subStr1 rangeOfString:@":"].length);
               NSRange range2 = [subStr1 rangeOfString:@"from="];
                
                NSString *subStr3 = [subStr1 substringToIndex:range2.location+2];//http://----from=  这一段需要替代
                NSString *subStr4 = [subStr1 substringFromIndex:range2.location+2];//不需要编码的
               subStr1 =  [subStr1 stringByReplacingOccurrencesOfString:@":" withString:@"%3A"];

               subStr1 =  [subStr1 stringByReplacingOccurrencesOfString:@"/" withString:@"%2F"];
                v.url = [NSString stringWithFormat:@"%@%@",subStr2,subStr1];

*/
            }else{
                v.url = productStr;

            }
            NSLog(@"=productStr==%@==url^^^^=%@",productStr,v.url);
            [self.navigationController pushViewController:v animated:YES];
            [self click:idStr];

//注意这里要返回NO
            return NO;
        }else if (components.count>1&&[[components objectAtIndex:0] isEqualToString:@"iostest"]) {
            
            return NO;
        }else{
            return YES;
        }
    return YES;
}


0k,大致就这样了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值