Android-webview加载网页去除标题
来源:互联网 发布:网络歌手好听的歌2016 编辑:程序博客网 时间:2024/06/18 17:45
问题描述:
在进行app开发时,我们会经常遇到webview加载一个网址的情况,但是仅仅是webview.loadUrl()并不能满足我们的需求,因为一般网页上面都有一个标题,,标题的颜色和我们的app风格可能整体都不太搭,这个时候该怎么办?除了让web端的朋友们专门写一个的情况下,还有另外一个方法,就是利用js或者jquery处理,原理都是一样,这里只讲一下js。
先看一下效果图:
这是web端网页的加载页面:
这是webview.loadUrl()的数据加载后的页面:
这是项目要求的去掉标题的页面:
解决思路:
利用js交互,将webview加载的URL的页面html做一些修改,例如将显示标题的一部分置空.关键点在于找到html中展示标题的节点
那么我们的解决步骤就是:
1.将webview加载的URL在浏览器上打来,鼠标右键单击,查看页面源代码,可以看到页面的布局信息,可以确定我们要删除的标题的代码所在的位置
2.自己定义WebViewClient,去取代系统对webview加载页面的处理,重写WebViewClient的
2.onPageFinished()中编辑javascript函数将显示标题的部分置空或者删除,并调用onPageFinished()方法
3.onPageFinished()中显示被JavaScript处理过的网页数据
查看页面源码,找出要移除的代码段:
WebView处理:
WebView webView = (WebView) findViewById(R.id.webview); WebSettings webSettings = webView.getSettings(); webSettings.setJavaScriptEnabled(true); webSettings.setUseWideViewPort(true); webSettings.setLoadWithOverviewMode(true); webView.loadUrl("http://www.lymidas.com/Home/DataCenter?currentId=1"); webView.setWebViewClient(new WebViewClient(){ @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); //编写 javaScript方法 String javascript = "javascript:function hideOther() {" + "document.getElementsByTagName('body')[0].innerHTML;" + "document.getElementsByTagName('div')[0].style.display='none';" + "document.getElementsByTagName('div')[3].style.display='none';" + "document.getElementsByClassName('dropdown')[0].style.display='none';" + "document.getElementsByClassName('min')[0].remove();" + "var divs = document.getElementsByTagName('div');" + "var lastDiv = divs[divs.length-1];" + "lastDiv.remove();" + "document.getElementsByClassName('showme')[0].remove();" + "document.getElementsByClassName('nei-t3')[1].remove();}"; //创建方法 view.loadUrl(javascript); //加载方法 view.loadUrl("javascript:hideOther();"); } });
总结:
这里要注意几个地方:
第一点:
上面javaScript方法中:
getElementByTagName("xxx")是通过标签的名称获取
getElementByClassName("xxx")是获取标签上定义的class名称获取
第二点:
有的时候,网页上查看页面源代码看到的html内容 和 手机上处理页面内容不太一样,区别就在于网页上带有 Class的标签,在手机上加载时,Class标签就不见了,造成的后果是明明使用getElementByClassName(“”XXX“”).remove()处理过了,但是没有起作用。这个时候的解决方法是使用getElementByTagName("xxx")是通过标签的名称获取,然后remove().
查看webview上加载网页的页面源码是看这篇博客http://blog.csdn.net/qq_32452623/article/details/52182964
关于,为什么出现这种情况的原因还不知道,如果有朋友知道,请告诉我一下,先谢谢了。
PS:
可能的原因(1):
- 手机加载的网页和你在pc加载的网页地址不一样,当你用手机加载的时候,会自动重定向到m.xx.com这样的站点(m指mobile加载的,网页加载时一般是www.xx.com)。(这里要谢谢无缘公子的评论告知)
第三点:
这种去标题的方式有个小不美的地方,因为本质是加载两次Url,一次是原本的Url,一次是处理过的URL ,所以刚进入页面加载的是带标题的,过了一段时间是闪烁一下,加载显示的是操作后的Url.
关于这个闪烁的处理,我想了两种方式:
1.将webview先隐藏,加载完成后再显示.
2.考虑在onPageStarted()方法中显示了等待框缓冲一下.
但是都有个问题,如果判断第二次加载URL结束,直接在onPagefinished()中view.loadurl()语句后面是不可行的,因为里面是开了线程 异步执行的.这个问题暂时还是没有解决.
最后 附上我写这篇博客的时候测试的小Demo,传送地址http://download.csdn.net/detail/qq_32452623/9612074
- Android-webview加载网页去除标题
- Android----webview 去除网页标题
- 网页加载去除网页元素 webView
- Android WebView 加载网页
- android webview加载网页
- Android加载网页WebView
- Android-WebView加载网页
- android 加载webview网页
- android WebView加载网页视频
- android使用webview加载网页
- android使用webview加载网页
- android:使用webview加载网页
- Android之WebView加载网页
- android使用webview加载网页
- Android使用WebView加载网页
- android studio webview加载网页
- Android使用WebView加载网页
- Android控件 WebView加载网页
- Android Studio进行Jni应用开发
- HDOJ 1272 小希的迷宫
- RabbitMQ Analysis
- 返回android应用主界面的点击事件
- 图结构练习——BFSDFS——判断可达性
- Android-webview加载网页去除标题
- Python print函数
- 转载 Jquery Table 的基本操作
- Spring对Hibernate事务管理
- egret 适配问题 优化问题 新手引导
- 解决 java “错误:编码GBK 的不可映射字符”
- linux下安装ORACLE
- windows键盘勾子的使用
- RabbitMQ生产者模型