协议拦截
2018-11-21 本文已影响7人
小凡凡520
1.拦截代理:
让webView执行js语句
2.js调用oc
通过webView代理方法、拦截网页的重定向请求。判断是否需要调用oc方法
3.oc调用js
通过webView直接执行js语句的方法、直接调用js方法(等于在浏览器控制台中直接执行js语句)
js调用OC
只需要正常一个url定向
<a href="appscheme://shouAlert?提示&这是一个js发起的方法&ok">弹窗</a>
OC中的操作
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
NSURL * url = [request URL];
NSString * scheme = [url scheme];
//比对scheme是否是需要app进行处理
if ([scheme isEqualToString:@"appscheme"]) {
//获得方法名
NSString * host = [url host];
NSString * queryStr = [[url query] stringByRemovingPercentEncoding];
//获得参数
NSArray * queryArr = [queryStr componentsSeparatedByString:@"&"];
if ([host isEqualToString:@"shouAlert"]) {
//你也可以做个防止越界的容错
[self showAlertWithTitle:queryArr[0] message:queryArr[1] cancelBtnTitle:queryArr[2]];
}
return NO;
}
return YES;
}
- (void)showAlertWithTitle:(NSString *)title message:(NSString *)message cancelBtnTitle:(NSString *)cancelBtnTitle {
UIAlertController * alert = [[UIAlertController alloc]init];
alert.title = title;
alert.message = message;
UIAlertAction * action = [UIAlertAction actionWithTitle:cancelBtnTitle style:UIAlertActionStyleDefault handler:nil];
[alert addAction:action];
[self presentViewController:alert animated:YES completion:nil];
}
oc调用js
先在js中约定一个js方法备用
<script>
function showPrompt(msg,placeholder) {
prompt(msg,placeholder);
}
</script>
webView为我们提供了一个方法
- (void)btnClick {
[self.webView stringByEvaluatingJavaScriptFromString:@"showPrompt('123','321')"];
}
这个方法就相当于在浏览器的console中直接输入一段js代码