美文网首页
协议拦截

协议拦截

作者: 小凡凡520 | 来源:发表于2018-11-21 23:11 被阅读7次
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代码

相关文章

网友评论

      本文标题:协议拦截

      本文链接:https://www.haomeiwen.com/subject/ypahqqtx.html