在上一篇文章地址(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,大致就这样了