在开发中,难免会用到webview来,不管是纯粹展示内容还是为了缩短开发周期,涉及到交互,就有一些不舒服了。
下边就简单介绍一下常用的方法(这里用的是UIWebView不是WKWebView)
---------捕获点击--------
页面里的点击,都可以在webView的代理方法
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
捕获到点击之后的url(request.URL),根据这个url来决定下一步你要做的处理。
返回值就是用来判断还要不要再加载webview。
来个
判断点击的是不是电话
if ([[request.URL absoluteString] rangeOfString:@"tel"].location != NSNotFound) {
NSArray *arr = [urlstr componentsSeparatedByString:@":"];
if (arr[1]) {
NSString * strPho = arr[1];
NSMutableString * str=[[NSMutableString alloc] initWithFormat:@"telprompt://%@",strPho];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:str]];
return NO;//注意这里的返回值,在某一个判断中,如果需要跳转你自己的界面,返回NO,如果是你想获得到一些信息,不影响webView的加载,可以返回YES
}
}
在代理方法的最后,一定要返回YES,不然,你的界面就不会再加载了。
注意这里的UIWebViewNavigationType,如果需要,你可以用捕获的url和UIWebViewNavigationType一起来做判断。
---------注入js--------
注入js,通过js中的函数来获取返回结果都是这个方法(一般我是在weibView的加载完成的方法里注入js)
[web stringByEvaluatingJavaScriptFromString:<#(nonnull NSString *)#>];
来个
static NSString * const jsFunction = @"
function getImgs(){\
var objs = document.getElementsByTagName(\"img\");\
return objs;\
};"
[webView stringByEvaluatingJavaScriptFromString:jsFunction];//注入js方法
返回的结果,可以这样得到
NSArray *imgAry = [webView stringByEvaluatingJavaScriptFromString:@"getImgs()"];//得到js方法的返回结果
如果你用过swift来编程,看到js语法应该很熟悉,函数式编程,你一定会爱上swift的,有兴趣的同学不妨尝试一下。