在进行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