webView的拦截,js注入的一般方法

在开发中,难免会用到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的,有兴趣的同学不妨尝试一下。

你可能感兴趣的:(webView的拦截,js注入的一般方法)