UIWebView JS注入

UIWebView JS注入

@property (weaknonatomicIBOutlet UIWebView *webView;


/*

  .JS注入 : JS代码通过UIWebView的代理方法作为桥梁,注入到网页

    1.步骤 : 

        1.1 确定要优化的地方

        1.2 获取到优化界面的JS代码,如果自己会写就自己写,不会写就找前端"乞求"

        1.3 找到对应的UIWebView的代理方法,调用系统提供的JS注入的方法,注入JS即可

  .网页和苹果原生界面交互

    1.步骤

        1.1 需要使标签可点击 (JS注入点击事件,需要主动发送请求,自定义URL,用于拦截)

        1.2 需要监听标签的点击 (shouldStartLoadWithRequest)

        1.3 需要区分点击的标签是哪个 (拦截的请求地址和自定义URL对比)

        1.4 根据不同的点击的标签跳转到不同的原生控制器

 */

- (void)viewDidLoad {

    [super viewDidLoad];

    

    [self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://m.dianping.com/tuan/deal/5501525"]]];

    // 设置代理

    self.webView.delegate = self;

}

/// 即将开始加载时调用的 : 拦截到网页上的所有的网络请求,监听网页的请求

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {

    // request : 就是监听/拦截到的网页的请求(window.location.href : 是在主动发送网络请求)

    NSString *URLString = request.URL.absoluteString;

    NSLog(@"拦截 %@",URLString);

    

    if ([URLString isEqualToString:@"hm://www.yaowoya.com"]) {

        [self.navigationController pushViewController:[TestViewController newanimated:YES];

        return NO// hm://www.yaowoya.com 没有数据,不要再尝试去加载,浪费流量

    }

    

    return YES// 表示展示拦截到的请求对应的数据

    // return NO; // 表示不展示拦截到的请求对应的数据

}

/// 加载完成时调用的 : 一般做"JS注入"

- (void)webViewDidFinishLoad:(UIWebView *)webView {

    

    NSMutableString *stringM = [NSMutableString string];

    // 拼接移除导航的JS代码

    [stringM appendString:@"var headerTag = document.getElementsByTagName('header')[0];headerTag.parentNode.removeChild(headerTag);"];

    // 拼接移除橙色按钮的JS代码

    [stringM appendString:@"var fixTag = document.getElementsByClassName('footer-btn-fix')[0];fixTag.parentNode.removeChild(fixTag);"];

    // 拼接移除底部的JS代码

    [stringM appendString:@"var footerTag = document.getElementsByClassName('footer')[0];footerTag.parentNode.removeChild(footerTag);"];

    

    // 给标签添加点击事件

    [stringM appendString:@"var buytag = document.getElementsByClassName('buy-btn btn-gray')[0];buytag.onclick = function buytagClick() {window.location.href = 'hm://www.yaowoya.com'};"];

    

    // JS注入的方法

    [webView stringByEvaluatingJavaScriptFromString:stringM];

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值