在做混合應(yīng)用的時候經(jīng)常會遇到加載網(wǎng)頁的問題
但是有的時候網(wǎng)頁并不一定能完全達到我們的要求好渠,甚至有時候我們會用到其他平臺的網(wǎng)頁作為外鏈,但如果直接使用別人的網(wǎng)址力奋,很難符合APP的要求凡资。這個時候就有必要過濾掉其中一些東西了。
達到這個要求的方法還是比較多的:比如說再加載網(wǎng)頁之前注入一些JS方法
WKUserScript *getUserScript = [[WKUserScriptalloc]initWithSource:[NSStringstringWithFormat:@"function hideInput() {var x = document.getElementsByTagName('input');x[0].remove();}"]injectionTime:WKUserScriptInjectionTimeAtDocumentStartforMainFrameOnly:NO];
甚至可以使用網(wǎng)絡(luò)請求道HTML之后用正則過濾掉一些內(nèi)容再顯示冗懦,不過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);}];
這樣使用還有一些不足的地方,因為移除控件有一個動畫披蕉,會出現(xiàn)一閃而過的移除的動畫颈畸,體驗不太好∠В可以在WKWebView加載內(nèi)容之前先進行隱藏承冰,然后在block中顯示,并且顯示的時候要做一個0.5m以上的延時食零,如下
dispatch_time_tdelayTime =dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5/*延遲執(zhí)行時間*/*NSEC_PER_SEC));
dispatch_after(delayTime,dispatch_get_main_queue(), ^{
_webViews.hidden=NO;
});
OK困乒,完成。
當然WKUserScript有WKUserScript的好處贰谣,比如說用WKWebView加載一個登錄網(wǎng)頁的時候娜搂,為了想獲得登錄賬號,就可以這樣使用WKUserScript*getUserScript = [[WKUserScriptalloc]initWithSource:[NSStringstringWithFormat:@"function getUser() {var x = document.getElementsByTagName('input');return x[0].value;}"]injectionTime:WKUserScriptInjectionTimeAtDocumentStartforMainFrameOnly:NO];
然后在給手機鍵盤添加監(jiān)聽方法吱抚,每次鍵盤隱藏的時候就調(diào)用getUser方法得到返回結(jié)果百宇。當然,在登錄成功跳轉(zhuǎn)的時候去調(diào)用該方法也是可以的秘豹。具體的JS代碼就要看具體的H5代碼了携御。