Android通过WebView获取解析html内容

封装从url 拉取 HTML 并加载到 WebView 的完整流程 本文介绍了在Android应用中从URL获取HTML内容并加载到WebView的完整实现方案。关键点包括:1)处理URL重定向,获取最终地址作为baseUrl;2)使用OkHttp进行网络请求,配置超时、缓存和统一UA;3)同步Cookie保持会话一致性;4)优先使用loadDataWithBaseURL加载本地HTML,若判断为空壳页面则回退到loadUrl;5)提供完整的异常处理和回退机制。方案封装为可复用的WebContentLoader类,支持Builder模式配置和回调接口,包含字符集解析、HTM 阅读详情



童话美景

概述

在Android开发过程中,我们可能需要做一些模拟操作,可能需要获取HTML页面的一些信息,此时就需要借助重写WebViewClient的onPageFinished方法,在onPageFinished中加载一段js代码,js代码再调用本地方法,具体代码如下:

/**
 * Dmeo说明: 当WebView加载网页时获取该网页中的内容.
 */
public class MainActivity extends Activity
{
    private WebView mWebView;
    String na;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        init();

    }

    @SuppressLint("SetJavaScriptEnabled")
    private void init() {
        mWebView = (WebView) findViewById(R.id.webView);
        // 开启JavaScript支持
        mWebView.getSettings().setJavaScriptEnabled(true);

        mWebView.addJavascriptInterface(new InJavaScriptLocalObj(), "java_obj");

        // 设置WebView是否支持使用屏幕控件或手势进行缩放,默认是true,支持缩放
        mWebView.getSettings().setSupportZoom(true);

        // 设置WebView是否使用其内置的变焦机制,该机制集合屏幕缩放控件使用,默认是false,不使用内置变焦机制。
        mWebView.getSettings().setBuiltInZoomControls(true);

        // 设置是否开启DOM存储API权限,默认false,未开启,设置为true,WebView能够使用DOM storage API
        mWebView.getSettings().setDomStorageEnabled(true);

        // 触摸焦点起作用.如果不设置,则在点击网页文本输入框时,不能弹出软键盘及不响应其他的一些事件。
        mWebView.requestFocus();

        // 设置此属性,可任意比例缩放,设置webview推荐使用的窗口
        mWebView.getSettings().setUseWideViewPort(true);

        // 设置webview加载的页面的模式,缩放至屏幕的大小
        mWebView.getSettings().setLoadWithOverviewMode(true);

        // 加载链接
        mWebView.loadUrl("http://m.qiaocat.com/topic-618_topic/topicIndex");

        mWebView.setWebViewClient(new WebViewClient() {
            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon) {
                // 在开始加载网页时会回调
                super.onPageStarted(view, url, favicon);
            }

            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                // 拦截 url 跳转,在里边添加点击链接跳转或者操作
                view.loadUrl(url);
                return true;
            }

            @Override
            public void onPageFinished(WebView view, String url) {
                // 在结束加载网页时会回调

                // 获取页面内容
                view.loadUrl("javascript:window.java_obj.showSource("
                        + "document.getElementsByTagName('html')[0].innerHTML);");

                // 获取解析<meta name="share-description" content="获取到的值">
                view.loadUrl("javascript:window.java_obj.showDescription("
                        + "document.querySelector('meta[name=\"share-description\"]').getAttribute('content')"
                        + ");");
                super.onPageFinished(view, url);
            }

            @Override
            public void onReceivedError(WebView view, int errorCode,
                    String description, String failingUrl) {
                // 加载错误的时候会回调,在其中可做错误处理,比如再请求加载一次,或者提示404的错误页面
                super.onReceivedError(view, errorCode, description, failingUrl);
            }

            @Override
            public WebResourceResponse shouldInterceptRequest(WebView view,
                    WebResourceRequest request) {
                // 在每一次请求资源时,都会通过这个函数来回调
                return super.shouldInterceptRequest(view, request);
            }

        });
    }

    public final class InJavaScriptLocalObj
    {
        @JavascriptInterface
        public void showSource(String html) {
            System.out.println("====>html=" + html);
        }

        @JavascriptInterface
        public void showDescription(String str) {
            System.out.println("====>html=" + str);
        }
    }

}
使用Android WebView加载和解析HTML和JavaScript Android提供了WebView组件,它可以加载和显示HTML页面,并执行其中的JavaScript代码。本文将详细介绍如何在Android应用中使用WebView加载和解析HTML和JavaScript,并提供相应的示例代码。你可以通过为WebView设置WebViewClient和WebChromeClient来处理WebView中的网页事件,如页面加载完成、链接点击等。一旦启用了JavaScript支持,WebView将能够执行加载的网页中的JavaScript代码。步骤3:加载HTML内容。 阅读详情

相关推荐

告别有线:用PVE直通无线网卡,打造一台真正的‘无线’Win10软路由/测试机

本文详细介绍了如何通过PVE直通无线网卡技术,构建全无线Win10软路由或测试机。从硬件选型、PVE环境配置到PCIe和USB双模直通技术,逐步指导实现Wi-Fi AP和蓝牙连接功能,为家庭实验室和小型办公环境提供灵活高效的网络解决方案。

weixin_28683689的博客 586

android webview流程,Android-通过WebView获取html内容

前言有时候我们可能需要做一些模拟操作,比如爬虫,一般我们会直接采用HTTP请求实现扒取网页内容,不过,我们可以使用WebView来实现。如何实现WebView初始化,我们为其设置参数,为其设置嵌入JavaScript代码的Java对象。this.getSettings().setJavaScriptEnabled(true);this.addJavascriptInterface(new InJa...

weixin_35693055的博客 1033

【STM32项目】老人健康跌倒检测系统实现(附教程PCB资料)

功能概述 跌倒检测 倾倒告警,人体角度倾斜至阈值触发蜂鸣报警 异常运动,加速度超过正常行动阈值时触发报警 心率监测 实时检测心率数据 血氧监测 实时检测采集血氧 血压测量 血压在线测量 红外体温 非接触体温采集方案 接触式体温采集方案 实时定位 中科微GPSGT-U12双频GPS北斗 GLONASS IRNSS定位系统 NEMA数据解析 可扩展高精度定位方案厘米级 屏幕显示 数据采集显示 告警阈值设置 语音提示 1欢迎使用老人智慧监测系统

洋洋的博客 1万+

android webview 加载本地html,低配置手机超级慢

  如题:android webview 加载本地html,低配置手机超级慢,这是在低配置手机android 4.4版本上遇到这样的问题,本地的html已经放在了asserts文件夹下面,然后运行,在htc上,有时候需要十几秒的始终,好一点的手机也要7/8秒钟,感觉这个不能忍,然后搜索了网上结合Stack Overflow上的答案,我的配置如下,经过这样的修改,时间变为3秒钟左右,提升了不少的速度...

你好邱林和的专栏 3937

System Verilog学习笔记(十九)——覆盖率

覆盖率是用来衡量验证精度和完备性的数据指标。也可以告诉我们在仿真时设计的哪些结构被触发,哪些没被触发。高质量的验证需要满足以下三个条件。

ljy77882333的博客 2142

一文介绍Linux EAS

EAS只在系统负载不重时,即系统中每个CPU的利用率都低于其算力的80%时才被启用,而且选出的最节能CPU只有比线程当前运行的CPU节约能量大于6%时,线程才会迁移到该CPU运行。因此EAS为线程选择最节约能量的CPU来运行的前提条件是很苛刻的,针对重载场景(比如游戏),EAS的功能应该很少被使用起来,针对重载场景的功耗优化,这里可能是一个值得尝试的点。算力(capacity)是CPU调度中的一个基础概念,它反映的是一个CPU的计算能力,是个规格化的值,可以通过读取Android手机的文件节点。

youzhangjing_的博客 1234

Android的WebView控件载入网页显示速度慢的究极解决方案

Android的WebView控件载入网页显示速度慢的究极解决方案 【转载请注明来源自http://hi.baidu.com/goldchocobo/】 Android客户端中混搭HTML页面,会出现虽然HTML内容载入完成,标题也正常显示,但是整个网页需要等到近5秒(甚至更多)时间才会显示出来。研究了很久,搜遍了国外很多网站,也看过PhoneGap的代码,一直无解。 一般人堆WebVi

SueAnthony223的专栏 1686

【学习体会】Lighttools8.4.0:矩形阵列光源+条形光源的光学仿真分析

在solidworks中设计了条形光源的基本结构: 由32*6个矩形led组成矩形光源阵列,如下所示 另存为step文件后,导入lighttools中,这里要设置模型的光学属性为:吸收体(机械) 因为我们设计的光源模型是一个整体,我们不能单个面的设置光源,比如说, 这样做的话并不会是这个面设置为光源,而是会把做一个模型都变成一个光源,如下 这显然不是我们想要的 那么,我们就在led位置上放置一个矩形面光源, 这样我们就放置好了一个面光源, 但是问题是,还有191...

LeonJin的博客 1万+

webview载入html缓慢,在Android中加载本地html页面的Webview很慢

vipin..7尝试这段代码以获得更好的性能AssetManager mgr = getContext().getAssets();try {InputStream in = mgr.open(FileName,AssetManager.ACCESS_BUFFER);String sHTML = streamToString(in);in.close();//display this html i...

weixin_30045091的博客 688

ICLR 2022)ODConv:即插即用的动态卷积 (附代码)

一定程度上讲,ODConv可以视作CondConv的延续,将CondConv中一个维度上的动态特性进行了扩展,同时了考虑了空域、输入通道、输出通道等维度上的动态性,故称之为全维度动态卷积。ODConv是一种动态卷积算法,它的原理是在卷积过程中,根据输入数据的特征动态地调整卷积核的形状和大小,以适应不同的输入数据。具体来说,ODConv通过引入一个可学习的形变模块,根据输入数据的特征动态地调整卷积核的形状和大小,从而提高了卷积神经网络的性能。此外,相比常规卷积,动态卷积的卷积核参数往往是其n倍。

PLANTTHESON的博客 2万+

RK3568下GPIO模拟串口

在嵌入式开发中,硬件 UART 资源可能被其他外设占用。此时,通过 GPIO 模拟 UART(软串口)成为一种灵活的解决方案。本文基于 RK3568 平台,结合 Linux 内核模块,实现高精度软串口通信,并深入分析关键技术细节。可以看到已经接收到数据了,可以自己创建自定义的设备文件到/dev下,也可以按照串口设备的标准创建一个设备,后面有时间我写一篇和标准串口设备结合的gpio模拟串口文章。RK3568 GPIO 模拟串口(软串口)实现详解。将编译好的驱动放到板子上运行。再写个Makefile。

文石_2009的博客 364

android webview 获取网页内容,在WebView中获取网页中的内容

原理:重写WebViewClient的onPageFinished方法,在onPageFinished中加载一段js代码,js代码再调用本地方法用下面的方法可以获取网页的html源码importandroid.app.Activity;importandroid.graphics.Bitmap;importandroid.os.Bundle;importandroid.util.Log;i...

weixin_39996478的博客 2361

innovus:InstPad、CellPad 、module padding、clock cell halo

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?site_num指的是padding的大小以site宽度为单位。

m0_61544122的博客 2023

获取解析后的html内容,Android通过WebView获取解析html内容

混合开发概述在Android开发过程中,我们可能需要做一些模拟操作,可能需要获取HTML页面的一些信息,此时就需要借助重写WebViewClient的onPageFinished方法,在onPageFinished中加载一段js代码,js代码再调用本地方法,具体代码如下:/*** Dmeo说明: 当WebView加载网页时获取该网页中的内容.*/public class MainActivity ...

weixin_32638607的博客 619

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

android webview 获取内容,Android从WebView中获取html,并且获取某个标签的内容

初始化webView,使其支持javascriptWebSettings settings = mWebView.getSettings();settings.setJavaScriptEnabled(true);添加一个js交互对象mWebView.addJavascriptInterface(new JavaObjectJsInterface(), "java_obj");public cla...

weixin_30440363的博客 1480

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Android WebView加载本地统一HTML界面样式文件并填充内容

前言 之前加载HTMl图文都是使用TextView,但是现在需要统一三个端的样式,给出了一个HTML文件,我想反正都是HTML格式的,TextView应该也没问题。我就将文本直接填充进去,一运行。。。。发现Html.fromHtml 无法解析部分代码,直接把它们显示了出来。。 我又是一个HTML的小白,于是乎还是掏出了WebView来实现吧! 1、HTML样式文件读取 首先将文

AmStrong_的博客 5489

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

webview js注入提取html内容

需求:加载第三方的web链接时,他们的错误直接抛出在webView显示,所以我们需要抓取到webview中的html内容,然后解析出里面的错误日志,通过dialog弹出给用户。 方案:1、通过HttpPost接口访问url拿到里面的错误日志,然后弹出,没有错误日志的时候,webview加载url,该方案需要额外多访问一次url,并且需要拦击到该url,如果是通过js表单的形式提交的url,web

u013136708的专栏 2498

webview 获取当前html代码,是否可以从WebView获取HTML代码

我想抢先获取要在中加载的网页的HTML代码,webView使用正则表达式解析它,并仅显示所需的HTML代码,同时让该网页仍然认为它已加载了所有内容。有什么方法可以通过WebViewClient.onLoadResource()或类似方法来做到这一点?编辑:我尝试过此:class MyJavaScriptInterface{@SuppressWarnings("unused")public void...

weixin_29863401的博客 365

webView向android 传值

最近做webview,遇到2种需求,一种是在自己服务器上的HTML中获取数据,另一种是通过自己服务器上的HTML中的超链接跳到另一个站点的HTML中,并获取数据。于是,总结了2种通过webview获取网页上的数据的方式:第一种:简单点的,直接通过js调Java,在调用方法的过程中将数据通过方法的参数传递给Android端,(前提:服务端有对应的faxun对象,而且调用的方法是showImages(S

TIANWENJU 1883

如何用webview.获取html元素,WebView怎么获取Html元素的值?

繁华开满天机只能通过JavaScript来获取, 然后通过JS获取, 然后通过JavaScriptInterface来传递给Java层。做webview,遇到2种需求,一种是在自己服务器上的HTML中获取数据,另一种是通过自己服务器上的HTML中的超链接跳到另一个站点的HTML中,并获取数据。于是,总结了2种通过webview获取网页上的数据的方式:第一种:简单点的,直接通过js调java,在调用...

weixin_28922555的博客 1374

android webview 加载string,Android webview从strings.xml加载HTML

所以我在Strings.xml中有这个:Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praesent libero. Sed cursus ante dapibus diam. Sed nisi. Nulla quis sem at nibh elementum imperdiet. Duis...

weixin_42541463的博客 321

Android WebView 参考链接

参考链接: Android WebView基本使用 Android WebView使用全面解析(加载网络资源、本地HTML,JS交互) Android Webview 获取网页form 提交的数据 Form表单提交到Web服务器 获取WebView加载的网页内容并进行动态修改 ...

fevershen的专栏 241

android webview 文本,Android文本信息使用WebView显示

我这里是从服务器获取文本信息用来显示文本并有从上到下展开动画效果首先从服务器获取文本然后使用H5的格式书写 代码如下data= centerItem.getContent();if (data!=null && !data.isEmpty()) {actionDetailsLy.setVisibility(View.VISIBLE);data="" +data+"";data=da...

weixin_39884492的博客 316

Android WebView之与 JaveScript交互

例如获取网页内容设置WebView Enable JavaScriptmWebView.getSettings().setJavaScriptEnabled(true); mWebView.addJavascriptInterface(new InJavaScriptLocalObj(), "local_obj"); Java供Js调用的类 final class InJavaScriptL

stwstw0123的专栏 2106

WebView获取网页代码并截取所需信息的三种方式

话不多说,直接步入正题.基本设置:webView.getSettings().setJavaScriptEnabled(true);方式一:截取网页内容,解析Step1.webView.addJavascriptInterface(new InJavaScriptLocalObj(), "local_obj");Step2. 在 WebViewActivity 中,创建这个内部类.final...

Phosphophyllite的博客 4068

【WebView加载本地资源图片 字体等】一些不常用的用法集合

困扰很几天的问题终于解决 独立开发真是难受,多希望有个大牛带带我啊,切入正题 公司需求:json返回html代码。需要我本地渲染,但是里面的图片和字体都需要我本地支持 其实很简单 html里的代码大致如此 @font-face { font-family: biaoti; -- 随意命名 src: url('file:///android_asset/字体.ttf') --本地字体位置

csdnbsd的专栏 851
上一篇: Android基础入门の单元测试
下一篇: Android视频录制并转GIF格式
林晓楠
博客等级 码龄9年 2粉丝 7原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值