美文网首页
关于WKWebView删除网页中某些控件的方法

关于WKWebView删除网页中某些控件的方法

作者: 随风cyl | 来源:发表于2017-04-18 10:48 被阅读229次

    在做混合应用的时候经常会遇到加载网页的问题

    但是有的时候网页并不一定能完全达到我们的要求,甚至有时候我们会用到其他平台的网页作为外链,但如果直接使用别人的网址,很难符合APP的要求。这个时候就有必要过滤掉其中一些东西了。

    达到这个要求的方法还是比较多的:比如说再加载网页之前注入一些JS方法

    WKUserScript *getUserScript = [[WKUserScriptalloc]initWithSource:[NSStringstringWithFormat:@"function hideInput() {var x = document.getElementsByTagName('input');x[0].remove();}"]injectionTime:WKUserScriptInjectionTimeAtDocumentStartforMainFrameOnly:NO];

    甚至可以使用网络请求道HTML之后用正则过滤掉一些内容再显示,不过WKWebView提供了一个非常方便的方法那就是evaluateJavaScript方法,比如说这样

    [webViewevaluateJavaScript:@"document.getElementsByClassName('zx-head-in')[0].remove();document.getElementsByClassName('footer')[0].remove();document.getElementsByClassName('detail-bg mt10 comment')[0].remove();document.getElementsByClassName('detail-bg mt10')[0].remove();document.getElementsByClassName('da-box daBox responsive ui-border-tb')[0].remove();document.getElementsByClassName('ui-share2')[0].remove();document.getElementsByClassName('ui-border-tb prl15')[0].remove();"completionHandler:^(idevaluate,NSError* error) {NSLog(@"---%@",error.domain);}];

    这样使用还有一些不足的地方,因为移除控件有一个动画,会出现一闪而过的移除的动画,体验不太好。可以在WKWebView加载内容之前先进行隐藏,然后在block中显示,并且显示的时候要做一个0.5m以上的延时,如下

    dispatch_time_tdelayTime =dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5/*延迟执行时间*/*NSEC_PER_SEC));

    dispatch_after(delayTime,dispatch_get_main_queue(), ^{

    _webViews.hidden=NO;

    });

    OK,完成。

    当然WKUserScript有WKUserScript的好处,比如说用WKWebView加载一个登录网页的时候,为了想获得登录账号,就可以这样使用WKUserScript*getUserScript = [[WKUserScriptalloc]initWithSource:[NSStringstringWithFormat:@"function getUser() {var x = document.getElementsByTagName('input');return x[0].value;}"]injectionTime:WKUserScriptInjectionTimeAtDocumentStartforMainFrameOnly:NO];

    然后在给手机键盘添加监听方法,每次键盘隐藏的时候就调用getUser方法得到返回结果。当然,在登录成功跳转的时候去调用该方法也是可以的。具体的JS代码就要看具体的H5代码了。

    相关文章

      网友评论

          本文标题:关于WKWebView删除网页中某些控件的方法

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