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

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

但是有的时候网页并不一定能完全达到我们的要求,甚至有时候我们会用到其他平台的网页作为外链,但如果直接使用别人的网址,很难符合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代码了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • iOS 的 Cookie 存取 https://juejin.im/entry/58d4c4cc44d904006...
    Farmers阅读 5,989评论 0 16
  • 前言 关于UIWebView的介绍,相信看过上文的小伙伴们,已经大概清楚了吧,如果有问题,欢迎提问。 本文是本系列...
    CoderLF阅读 9,011评论 2 12
  • http://www.cnblogs.com/mddblog/p/5281748.html 一、整体介绍 UIWe...
    F麦子阅读 1,261评论 0 2
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,868评论 18 139
  • 上午6点3分,体重62.36 早上罪恶了,不过很幸福,早上吃了鸭血馄炖,又要了一个奥尔良汉堡,不过吃完之后我在琴房...
    奻郗阅读 226评论 0 0