在進行app開發時,咱們會常常遇到webview加載一個網址的狀況,可是僅僅是webview.loadUrl()並不能知足咱們的需求,由於通常網頁上面都有一個標題,,標題的顏色和咱們的app風格可能總體都不太搭,這個時候該怎麼辦?除了讓web端的朋友們專門寫一個的狀況下,還有另一個方法,就是利用js或者jquery處理,原理都是同樣,這裏只講一下js。javascript
解決步驟就是:html
1.查看要加載頁面源代碼,找到要刪除的內容的標籤java
2.本身定義WebViewClient,重寫WebViewClient的方法,在.onPageFinished()中編輯javascript函數將顯示標題的部分置空或者刪除node
3.onPageFinished()中加載顯示被JavaScript處理過的網頁數據jquery
核心代碼】:web
import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; //webView 相關配置 public void init(){ webSettings = webView.getSettings(); webSettings.setDomStorageEnabled(true); // 加載東方航空,需設置此屬性,不然,頁面加載爲空白頁 //設置WebView屬性,可以執行Javascript腳本 webSettings.setJavaScriptEnabled(true); webView.addJavascriptInterface(new InJavaScriptLocalObj(), "local_obj"); webSettings.setAllowFileAccess(true); webSettings.setUseWideViewPort(true); webSettings.setLoadWithOverviewMode(true); //清除 webkit cookie,解決webView顯示原先界面 CookieSyncManager.createInstance(this); CookieSyncManager.getInstance().startSync(); CookieManager.getInstance().removeSessionCookie(); } /加載完畢後,顯示webView,防頁面閃爍 private void initHandler() { mHandler = new Handler(){ @Override public void handleMessage(Message msg) { switch (msg.what){ case 0: webView.setVisibility(View.VISIBLE); SysProgress.closeProgress();//關閉加載對話框 //獲取網頁源代碼 webView.loadUrl("javascript:window.local_obj.showSource('<head>'+" + "document.getElementsByTagName('html')[0].innerHTML+'</head>');"); break; } } }; } final class InJavaScriptLocalObj { //獲取網頁源代碼,分析當前頁面是哪個頁 @JavascriptInterface public void showSource(String html) { if(loginUrl.contains("m.airchina.com.cn")){ //國航官網 Document document = Jsoup.parse(html); Element nameElement = document.getElementById("uname"); Element mileElement = document.getElementById("mileage"); if(nameElement!= null && mileElement!= null){ // 登陸成功後的頁面 String name = nameElement.text(); String mileStr = mileElement.text(); LogUtil.i("name = "+name); LogUtil.i("mile = "+mileStr); String mile=""; if(mileStr.contains(":")){ mile= mileStr.split(":")[1]; } Toast.makeText(VerifyVipActivity.this, "認證成功", Toast.LENGTH_SHORT).show(); } else{ //登陸頁面 } } } } 【webView相關配置代碼】 WebView webView = (WebView) findViewById(R.id.webview); WebSettings webSettings = webView.getSettings(); webSettings.setJavaScriptEnabled(true); webSettings.setUseWideViewPort(true); webSettings.setLoadWithOverviewMode(true); webView.addJavascriptInterface(new InJavaScriptLocalObj(), "local_obj"); loginUrl = "https://m.airchina.com.cn/ac/c/invoke/login@pg"; webView.loadUrl(loginUrl); webView.setWebViewClient(new WebViewClient(){ @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { super.onPageStarted(view, url, favicon); webView.setVisibility(View.INVISIBLE); SysProgress.showProgress(VerifyVipActivity.this); //顯示加載對話框 } @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); //getElementById() 返回對擁有指定 id 的第一個對象的引用。 //getElementsByName() 返回帶有指定名稱的對象集合。 //getElementsByTagName() 返回帶有指定標籤名的對象集合。 //getElementsByClassName 返回指定class的對象的集合。 //編寫 javaScript方法,使用的是js腳本語言 String javascript = "javascript:function hideOther() {" + "document.getElementsByTagName('body')[0].innerHTML;" + "document.getElementsByTagName('header')[0].style.display='none';" + //取標題欄 /*改變國航登陸頁面的樣式*/ "if(document.getElementById('regbtn')){" + "document.getElementsByTagName('span')[0].style.display='none';" + "document.getElementsByTagName('span')[1].style.display='none';" + "document.getElementById('regbtn').style.display='none';" + "document.getElementById('subbtn').style.backgroundColor='#38761D';" + "document.getElementById('subbtn').style.borderColor='#ffffff';" + "document.getElementsByClassName('am-padding-left-xs')[0].style.width='100%';" + "}else{" + /*改變國航登陸成功後頁面的樣式*/ "document.getElementsByClassName('am-container')[0].style.display='none';" + "}" + "}"; //建立方法 view.loadUrl(javascript); //加載方法 view.loadUrl("javascript:hideOther();"); mHandler.sendEmptyMessageDelayed(0,500); } });
注: 由於本質是webView加載兩次Url,一次是本來的Url,一次是處理過的URL ,因此剛進入頁面加載的原始頁面,過了一段時間是閃爍一下,加載顯示的是操做後的Url. 因此,加載開始時webview不可見,顯示加載對話框,加載完成後,500ms後,顯示webView,關閉對話框。cookie
解析xml源代碼使用的是第三方Jsoup來解析相關標籤。相關文檔鏈接http://www.open-open.com/jsoup/app