ADBlock是瀏覽器必備的功能之一移必,ADBlock就是去掉網(wǎng)頁(yè)廣告功能,那么ios 瀏覽器(uiwebview)如何去廣告勒,主要有兩種形式的廣告,一種是攔截服務(wù)器發(fā)送的URL目养,一種是dom元素隱藏,攔截URL這里有兩種思路
? ? 1.利用NSURLProtocol 攔截網(wǎng)頁(yè)所有的請(qǐng)求毒嫡。然后攔截所有的請(qǐng)求癌蚁,去掉帶有廣告的js,圖片等資源
? ? 2.hook系統(tǒng)的- (NSURLRequest*)myWebView:(id)sender resource:(id)identifier willSendRequest:(NSURLRequest*)request redirectResponse:(NSURLResponse*)redirectResponse fromDataSource:(id)dataSource
這個(gè)方法攔截[request URL] 即可
dom元素隱藏是頁(yè)面dom元素加載完成之后即webViewDidFinishLoad這個(gè)方法中兜畸,通過js腳本利用正則表達(dá)式匹配dom元素的進(jìn)行隱藏
有了這兩種操作90%的頁(yè)面廣告都可以攔截掉努释,但是最近pm提出需求,需要將m.baidu.com下方的banner廣告進(jìn)行攔截
經(jīng)過多次試驗(yàn)咬摇,以上兩種操作對(duì)攔截類似m.baidu.com下面的banner類似的廣告都不行伐蒂,那么該如何去掉它,經(jīng)過手動(dòng)點(diǎn)擊?掉廣告肛鹏,在下次訪問的時(shí)候竟然沒有廣告逸邦,過了一兩天汰翠,廣告又出來,而且X掉廣告的時(shí)候沒有網(wǎng)絡(luò)請(qǐng)求產(chǎn)生昭雌,會(huì)不會(huì)是點(diǎn)擊?的時(shí)候存本地了,那么瀏覽器的本地key value存在哪里健田,localStorage烛卧,果然,點(diǎn)擊?的時(shí)候localStorage多了index_fbannerios_lastclosetime和search_btmb_lastclosetime兩個(gè)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推薦了