這幾天在寫(xiě)webView的時(shí)候,遇到了一個(gè)坑。需求是這樣的,webView加載HTML的時(shí)候,只顯示部分需要的內(nèi)容。
這里測(cè)試的是百度的搜索引擎。然而這里有個(gè)很重要的區(qū)別點(diǎn)。先放連接上來(lái)對(duì)比下:

2:這個(gè)時(shí)我們放在Android端webView上的連接:https://www.baidu.com/s?wd=webview

通過(guò)以上圖1和圖2的對(duì)比我們可以看到一個(gè)明顯的區(qū)別。就是兩個(gè)連接的顯示會(huì)有明顯的變化。看到源碼,頭部的標(biāo)簽的id和class也不一樣。這個(gè)地方需要特別注意。
不然后面用loadurl加載js隱藏頭部的時(shí)候時(shí),得到的對(duì)象時(shí)空的,根本找不到對(duì)應(yīng)的標(biāo)簽。
之前一直在找的問(wèn)題就是,webView加載的時(shí)連接2(圖2)的顯示。但是找標(biāo)簽一直是按連接1(圖1)的id/class去找對(duì)應(yīng)的標(biāo)簽。
找到了問(wèn)題所在,下面直接上代碼:
編寫(xiě)js代碼:(通過(guò)class遍歷全局查找div)
javascript:function getClass(parent,sClass) {
?? ??var aEle=parent.getElementsByTagName('div');?
? ??var aResult=[];
?? ??var i=0;?
? ??for(i<0;i<aEle.length;i++) {
?? ??????if(aEle[i].className==sClass) {?
? ??????????aResult.push(aEle[i]);?
? ??????}?
? ??};?
? ??return aResult;?
}void(0) ";
通過(guò)調(diào)用getClass獲取對(duì)應(yīng)的標(biāo)簽:
javascript:function hideOther() {?
getClass(document,'se-head-logo')[0].style.display='none';
getClass(document,'searchboxtop')[0].style.display='none'; getClass(document,'page-banner')[0].style.display='none';}
Android代碼執(zhí)行:
if(url!=null&&url.contains("baidu.com")){
String fun="javascript:function getClass(parent,sClass) { var aEle=parent.getElementsByTagName('div'); var aResult=[]; var i=0; for(i<0;i<aEle.length;i++) { if(aEle[i].className==sClass) { aResult.push(aEle[i]); } }; return aResult; }void(0) ";
? ? view.loadUrl(fun);
? ? String fun2="javascript:function hideOther() { getClass(document,'se-head-logo')[0].style.display='none';getClass(document,'searchboxtop')[0].style.display='none'; getClass(document,'page-banner')[0].style.display='none';}";
? ? view.loadUrl(fun2);
? ? view.loadUrl("javascript:hideOther();");
? ? Log.d("aaa","進(jìn)入執(zhí)行");
}
問(wèn)題2:隱藏代碼正確,但隱藏不了。
在隱藏標(biāo)簽時(shí),需要等頁(yè)面加載完成才能隱藏,因此我們需要在WebViewClient工具類下的方法onPageFinished內(nèi)執(zhí)行上面的代碼。(這里有個(gè)注意點(diǎn):在這個(gè)方法內(nèi)實(shí)現(xiàn)隱藏代碼,在頁(yè)面加載完成之前,我們還是可以看到隱藏部分的。等頁(yè)面全部加載完成后,js隱藏代碼才會(huì)執(zhí)行。)
那么我們要想標(biāo)簽在加載的過(guò)程中就隱藏,那怎么做呢!這個(gè)時(shí)候WebChromeClient工具類提供 了一個(gè)方法onProgressChanged,就是頁(yè)面加載進(jìn)度的變化。我們可以在這個(gè)方法內(nèi)再一次執(zhí)行上面的js代碼。
下面貼上代碼實(shí)現(xiàn)截圖:



第一次寫(xiě),對(duì)于問(wèn)題的描述,和解決過(guò)程表達(dá)的不是很清楚。如果有什么不對(duì)的地方,請(qǐng)指正。謝謝