文档章节

Android-webview加载网页去除标题

蜗牛崛起
 蜗牛崛起
发布于 2016/11/29 11:22
字数 828
阅读 279
收藏 0

在进行app开发时,我们会经常遇到webview加载一个网址的情况,但是仅仅是webview.loadUrl()并不能满足我们的需求,因为一般网页上面都有一个标题,,标题的颜色和我们的app风格可能整体都不太搭,这个时候该怎么办?除了让web端的朋友们专门写一个的情况下,还有另外一个方法,就是利用js或者jquery处理,原理都是一样,这里只讲一下js。

解决步骤就是:

1.查看要加载页面源代码,找到要删除的内容的标签

2.自己定义WebViewClient,重写WebViewClient的方法,在.onPageFinished()中编辑javascript函数将显示标题的部分置空或者删除

3.onPageFinished()中加载显示被JavaScript处理过的网页数据

核心代码】:

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,关闭对话框。

解析xml源代码使用的是第三方Jsoup来解析相关标签。相关文档连接http://www.open-open.com/jsoup/

参考http://m.blog.csdn.net/article/details?id=52214460

© 著作权归作者所有

蜗牛崛起
粉丝 3
博文 127
码字总数 63547
作品 0
东城
程序员
私信 提问
Android:最全面的 Webview 详解

前言 现在很多App里都内置了Web网页(Hyprid App),比如说很多电商平台,淘宝、京东、聚划算等等,如下图 那么这种该如何实现呢?其实这是Android里一个叫WebView的组件实现的。今天我将全面...

临江仙卜算子
2018/07/07
184
0
Android WebView基本使用

WebView介绍 Android WebView在Android平台上是一个特殊的View, 基于webkit引擎、展现web页面的控件,这个类可以被用来在你的app中仅仅显示一张在线的网页,还可以用来开发浏览器。WebView...

临江仙卜算子
2018/07/06
42
0
Android WebView 第一次正常加载,退出WebView界面,等1分钟后,再进加载就空白了

Webview 加载活动列表在在部分手机上空白显示,尝试的几种方式。 1、xml的WebView标签中添加android:layerType="hardware" 2、xml的WebView标签中添加android:layerType="software" 3、WebVi......

Keyoumi
2017/03/10
3.3K
4
android之在view中内嵌浏览器的方法

我要做的一个东西是在一个页面的中间嵌入浏览器,一开始不知道从哪里开始,因为以前用的都是Textveiw或者editVeiw之类的控件,而它们并不能用来显示网页的内容,怎么办呢? 首先想到的是:是...

迷途d书童
2012/03/24
2.4K
0
在 Flutter 中使用 WebView

本文示例代码可在微信公众号「01二进制」后台回复「WebView」查看下载 前言 我们知道在开发 Native App 时经常会有打开网页的需求,可供的选择通常只有两种: 在 App 内部打开网页 通过调用系...

雇个城管打天下
08/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

mac下redis安装、设置、启动停止

常用命令说明 redis服务器:redis-server redis客户端:redis-cli redis性能测试工具:redis-benchmark AOF文件修复工具:redis-check-aof RDB文件修复工具:redis-check-rd redis设置临时密...

botkenni
4分钟前
0
0
好程序员web前端分享HTML5常见面试题集锦四

好程序员web前端分享HTML5常见面试题集锦四 1、为什么要初始化CSS样式? 答案:因为浏览器的兼容问题,不同浏览器对有些标签的默认值是不同的,如果没对CSS初始化往往会出现浏览器之间的页面...

好程序员官方
5分钟前
0
0
CDN的网络架构是什么?

CDN网络架构主要由两大部分,分为中心和边缘两部分,中心指CDN网管中心和DNS重定向解析中心,负责全局负载均衡,设备系统安装在管理中心机房,边缘主要指异地节点,CDN分发的载体,主要由Cac...

云漫网络Ruan
5分钟前
1
0
pandas入门07---可视化

01 入门 制作提供信息的可视化是数据分析的重要任务之一。首先介绍一下matplotlib库。 import matplotlib.pyplot as pltimport numpy as npdata = np.arange(10)print(data)plt.plot(da...

筠初
6分钟前
1
0
201_PyTorch中文教程:Torch与Numpy互操作

201_PyTorch中文教程:Torch与Numpy互操作 更多参考: https://morvanzhou.github.io/tutorials/ 油管频道:https://www.youtube.com/user/MorvanZhou 依赖软件包: torch numpy Torch的更多数......

openthings
6分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部