美文网首页
去掉百度网页下方百度app推荐的banner实战

去掉百度网页下方百度app推荐的banner实战

作者: maoege | 来源:发表于2016-11-09 16:27 被阅读0次

    ADBlock是浏览器必备的功能之一,ADBlock就是去掉网页广告功能,那么ios 浏览器(uiwebview)如何去广告勒,主要有两种形式的广告,一种是拦截服务器发送的URL,一种是dom元素隐藏,拦截URL这里有两种思路

        1.利用NSURLProtocol 拦截网页所有的请求。然后拦截所有的请求,去掉带有广告的js,图片等资源

        2.hook系统的- (NSURLRequest*)myWebView:(id)sender resource:(id)identifier willSendRequest:(NSURLRequest*)request redirectResponse:(NSURLResponse*)redirectResponse fromDataSource:(id)dataSource

    这个方法拦截[request URL] 即可

    dom元素隐藏是页面dom元素加载完成之后即webViewDidFinishLoad这个方法中,通过js脚本利用正则表达式匹配dom元素的进行隐藏

    有了这两种操作90%的页面广告都可以拦截掉,但是最近pm提出需求,需要将m.baidu.com下方的banner广告进行拦截

    经过多次试验,以上两种操作对拦截类似m.baidu.com下面的banner类似的广告都不行,那么该如何去掉它,经过手动点击✘掉广告,在下次访问的时候竟然没有广告,过了一两天,广告又出来,而且X掉广告的时候没有网络请求产生,会不会是点击✘的时候存本地了,那么浏览器的本地key value存在哪里,localStorage,果然,点击✘的时候localStorage多了index_fbannerios_lastclosetime和search_btmb_lastclosetime两个key值,那么就好解决了在加载完成的方法中加入如下代码

    if([url.absoluteString rangeOfString:@"baidu.com/"].location != NSNotFound) {

                longlongtimeStamp =(longlong)([[NSDate date] timeIntervalSince1970] *1000.0);

                NSString *timeStampStr = [NSString stringWithFormat:@"%lld",timeStamp];

                NSString *jsStr = [NSString stringWithFormat:@"window.localStorage.setItem('index_fbannerios_lastclosetime',%@) ; window.localStorage.setItem('search_btmb_lastclosetime',%@)",timeStampStr,timeStampStr];

                [self stringByEvaluatingJavaScriptFromString:jsStr];

            }

    果然,最后再次加载百度再也看不到烦人的百度APP推荐了

    相关文章

      网友评论

          本文标题:去掉百度网页下方百度app推荐的banner实战

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