Android WebView使用

【Android】webview常用方法和使用 webview详解 阅读详情

本文主要对WebView进行介绍,包括webView 4个可以定制的点、设置WebView back键响应、控制网页的链接仍在webView中跳转、显示页面加载进度、处理https请求、利用addJavascriptInterface实现android程序和javascript交互等等

WebView基于webkit引擎展现web页面的控件,使用前需要在Android Manifest file中配置internet访问权限,否则提示页面无法访问

<uses-permission android:name="android.permission.INTERNET" />

WebView控件功能强大,除了具有一般View的属性和设置外,还可以对url请求、页面加载、渲染、页面交互进行强大的处理。

WebView有几个可以定制的点:

(1)设置WebChromeClient子类,WebChromeClient会在一些影响浏览器ui交互动作发生时被调用,比如WebView关闭和隐藏、页面加载进展、js确认框和警告框、js加载前、js操作超时、webView获得焦点等等,详见WebChromeClient

 

(2)设置WebViewClient子类,WebViewClient会在一些影响内容喧嚷的动作发生时被调用,比如表单的错误提交需要重新提交、页面开始加载及加载完成、资源加载中、接收到http认证需要处理、页面键盘响应、页面中的url打开处理等等,详见WebViewClient

 

(3)设置WebSettings类,其中包含多项配置。WebSettings用来对WebView的配置进行配置和管理,比如是否可以进行文件操作、缓存的设置、页面是否支持放大和缩小、是否允许使用数据库api、字体及文字编码设置、是否允许js脚本运行、是否允许图片自动加载、是否允许数据及密码保存等等,详见WebSettings

 

(4)设置addJavascriptInterface方法,将java对象绑定到webView中,以方便从页面js中控制java对象,实现用本地java代码和html页面进行交互,甚至可以进行页面自动化。但如此做存在安全隐患,所以若设置了此方法,请确保webView的代码都是自己完成,详细使用addJavascriptInterface进行自动化见本文5使用addJavascriptInterface完成和js交互


1、back键控制网页后退

Activity默认的back键处理为结束当前Activity,webView查看了很多网页后,希望按back键返回上一次浏览的页面,这个时候我们就需要覆盖onKeyDown函数,告诉他如何处理,如下:

    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (webView.canGoBack() && event.getKeyCode() == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
            webView.goBack();
            return true;
        }

        return super.onKeyDown(keyCode, event);
    }

 其中webView.canGoBack()在webView含有一个可后退的浏览记录时返回true

webView.goBack();表示返回webView的上次访问页面


2、当前网页的链接仍在webView中跳转

                webView.setWebViewClient(new WebViewClient() {

                    @Override
                    public boolean shouldOverrideUrlLoading(WebView view, String url) {
                        view.loadUrl(url);
                        return true;
                    }
                });

shouldOverrideUrlLoading表示当前webView中的一个新url需要加载时,给当前应用程序一个处理机会,如果没有重写此函数,webView请求ActivityManage选择合适的方式处理请求,就像弹出uc和互联网让用户选择浏览器一样。重写后return true表示让当前程序处理,return false表示让当前webView处理


3、页面加载进度

webView.setWebChromeClient(new WebChromeClient() {

    public void onProgressChanged(WebView view, int progress) {
        setTitle("页面加载中,请稍候..." + progress + "%");
        setProgress(progress * 100);

        if (progress == 100) {
            setTitle(R.string.app_name);
        }
    }
});


onProgressChanged通知应用程序当前页面加载的进度

progress表示当前页面加载的进度,为1至100的整数



4、处理https请求

webView默认是不处理https请求的,页面显示空白,需要进行如下设置:

    webView.setWebViewClient(new WebViewClient() {

        @Override
        public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
            handler.proceed();
//            handler.cancel();
//            handler.handleMessage(null);
        }
    });

onReceivedSslError为webView处理ssl证书设置

其中handler.proceed();表示等待证书响应

handler.cancel();表示挂起连接,为默认方式

handler.handleMessage(null);可做其他处理



5、使用addJavascriptInterface完成和js交互

5.1 javascript中调用java对象及方法

设置webView的addJavascriptInterface方法,该方法有两个参数,第一个参数为被绑定到js中的类实例,第二个参数为在js中暴露的类别名,在js中引用java对象就是用这个名字

ClassBeBindedToJS classBeBindedToJS = new ClassBeBindedToJS();
webView.addJavascriptInterface(classBeBindedToJS, "classNameBeExposedInJs"); 

实现绑定到js的类,其中的javaMethod方法我们将在页面前端js中调用,用于返回一段内容。 showHtml用来使用 AlertDialog显示一段html代码,稍后将使用到
private class ClassBeBindedToJS{
    public void showHtml(String html){
    	 new AlertDialog.Builder(UpdateStatusActivity.this) 
                     .setTitle("HTML").setMessage(html)
                     .setPositiveButton(android.R.string.ok, null)
                     .setCancelable(false).create().show();
    }
    public String javaMethod() {
        return "use java method";
    }
};

如此我们就可以在前端调用java对象,如下:
<span><html>
	<body>        
		<div id="displayDiv">Test page.</div>
		<input type="button" value="use java object" onclick="document.getElementById('</span>displayDiv').innerHTML=classNameBeExposedInJs.javaMethod()" />
<span>	</body>
</html></span>
这段html作用为点击button按钮,改变div内容为java对象方法中的内容,其中classNameBeExposedInJs为java对象在js中的别名, javaMethod为java对象的方法

5.2 java中调用js方法

用webView的loadUrl实现,比如现在我们想在页面加载完成后调用js中的hello函数,实现如下:

webView.setWebViewClient(new WebViewClient() {  
    @Override
    public void onPageFinished(WebView webView, String url){
        webView.loadUrl("javascript:hello()");
    }
});

怎么样,很简单吧^_^,直接loadUrl("javascript:hello()")就可以了 

利用这一点我们可以很方便的实现WebView的自动化,如网页自动化登录。举个栗子,实现http://m.renren.com/ 的自动登录啊,代码如下

webView.getSettings().setJavaScriptEnabled(true);
webView.loadUrl("http://m.renren.com");
webView.requestFocus();

ClassBeBindedToJS classBeBindedToJS = new ClassBeBindedToJS();
webView.addJavascriptInterface(classBeBindedToJS, "classNameBeExposedInJs");    
webView.setWebViewClient(new WebViewClient() {  
	@Override
	public void onPageFinished(WebView webView, String url){ 
		webView.loadUrl("javascript:document.getElementsByName('email')[0].value='userName'"); 
		webView.loadUrl("javascript:document.getElementsByName('password')[0].value='userPassword'"); 
		webView.loadUrl("javascript:document.getElementsByName('login')[0].click()");
	}
});

从中可以看出先加载http://m.renren.com页面,在页面加载完成onPageFinished后,调用js实现自动登录

其中三句js分别表示设置用户名文本框内容、设置用户密码文本框内容、点击登录按钮,如此登录成功喽


5.3 java和js混用实现一些效果

5.3.1 WebView用AlertDialog显示页面的html代码

之前5.1中的showHtml方法现在派上用场啦,在页面加载完成后显示页面html内容,如下:

webView.setWebViewClient(new WebViewClient() {  
    @Override
    public void onPageFinished(WebView webView, String url){
        webView.loadUrl("javascript:window.classNameBeExposedInJs.showHtml(document.getElementsByTagName('html')[0].innerHTML);");
    }
});

 其中webView.loadUrl表示调用页面中的js,而页面中的js window.classNameBeExposedInJs.showHtml调用了程序中的java对象的方法,方法参数为一段js。

首先webView会执行这一段js document.getElementsByTagName('html')[0].innerHTML。含义即为取得页面中html标记的innerHTML,及网页主要内容;

然后将得到的网页内容当作字符串参数传入showHtml方法

最后调用showHtml函数实现,即用AlertDialog显示字符串,如此得到了整个网页的大部分html代码


5.3.2 WebView显示当前页面的url地址

获得WebView当前页面url使用webView.getUrl()即可,如下:

webView.loadUrl("javascript:window.classNameBeExposedInJs.showHtml('" + webView.getUrl() + "');");


安卓android webview圆角效果 一开始使用shape的方式实现,发现不行,网页出来以后就会填充满 后来使用搜索引擎,看到其他人实现的webview圆角效果,连接  http://blog.youkuaiyun.com/zxwd2015/article/details/64554653 实测,性能太差,卡顿明显 于是自己重写 看了下他的代码,搞了4个path,各种moveTo和lineTo,我就想能不能把4个p 阅读详情

相关推荐

Android安卓 + webview + vue 实现图片上传

前提:需要首先实现web端的网页上传图片(只要网页上传图片成功,后续集成和android部分的相关操作,就可以成功实现图片上传) 步骤: web端实现网页上传 web嵌入安卓webview实现安卓手机拍照和选择图片上传 问题: 对安卓开发不太了解的web开发小伙伴,需要粗略的了解一下安卓开发的一些基本内容,这一步需要自己去适当的学习,如果这一步没有,那就不用往下看了 图片上传和拍照上传,需要的一些权限 高安卓版本的手机拍照上传,需要进行的额外操作 web端实现网页上传的代码这边就不赘述了,需要了

qq_14855277的博客 1970

Android之 WebView的使用

WebView的使用

qq_29848853的博客 8299

Android开发:通过 webview 将网页打包成安卓应用

近期团队接到一个新的项目,企业内部的一个掌上超市项目,最初考虑通过公众号或者小程序来做,后面说是部署在企业内网,就考虑到做网站应用,由于需要通过运营商分配的apn连接企业内网,所以在打开应用之前需要检测一下网络,如果是web端的话,那就没法检测网络了,所以考虑使用安卓的 webview 封装一下H5的应用。//设置js可以直接打开窗口,如window.open(),默认为false。//是否可以缩放,默认。

2401_89760998的博客 1303

安卓WebView的使用

WebView是Android中的原生UI控件,主要用于在app应用中方便地访问远程网页或本地html资源。同时,WebView也在Android中充当Java代码和JS代码之间交互的桥梁。实际上,也可以将WebView看做一个功能最小化的浏览器。

qq_40364278的博客 1万+

Android 中WebView的使用详解

前言: 通过WebView控件可以实现加载网页的效果。 加载URL(网络或者本地assets文件夹下的html文件) 加载html代码 Native和JavaScript的相互调用 一、加载网页的方法: 加载网络URL webView.loadUrl(“https://m.baidu.com”); 加载assets目录下的html文件 webView.loadUrl(“file:///android_asset/web.html”); 加载html代码 webView.loadData(); webV

路宇的博客 1万+

ByWebView:WebView全方面使用,JS交互,进度条,上传图片,错误页面,视频全屏播放,唤起原生App,获取网页源代码,被作为第三方浏览器打开,DeepLink,[腾讯x5使用示例]

ByWebView 特征 基本配置使用(宽幅自适应,返回网页上一层,显示网页标题等) 唤起三方应用(呼叫电话,发送短信,发送邮件等) 发布图片(版本兼容) 错误页面处理 全屏播放网络视频 与Js交互实例 优雅的进度条显示控件 演示示例: DeepLink的基本使用 被作为第三方浏览器打开 腾讯x5使用示例 引用 将JitPack存储库添加到您的构建文件中 allprojects { repositories { ... maven { url ' https://jitpack.io ' } } } 添加依赖项: dependencies { implementation ' com.github.youlookwhat:ByWebView:1.0.0 ' } 使用 byWebView = ByWebView .

Android安卓自带的 WebView 浏览器内核更新

Android 安卓自带 WebView 浏览器内核更新教程

aken 8万+

2025最新正版Autodesk 3ds Max 2022安装教程:从下载到中文环境配置全流程解析

Autodesk 3ds Max 2022是一款专业的三维建模、动画和渲染软件,广泛应用于影视制作、游戏开发、建筑可视化等领域。

waicsdn_haha的博客 1万+

android webview js 交互框架,安卓中webview与javascript的交互

当我们要实现丰富的图文混排效果的时候,我们一般会使用webview,这是一个功能十分强大的的控件,来看看官方的解释:A View that displays web pages. This class is the basis upon which you can roll your own web browser or simply display some online content wit...

weixin_42508114的博客 348

告别系统迁移蓝屏!用Intel RST驱动搞定11代酷睿装Win11的硬盘识别难题

本文详细介绍了如何通过Intel RST驱动解决11代酷睿处理器在安装Win11时遇到的硬盘识别问题。针对VMD技术导致的系统迁移蓝屏错误,提供了从驱动下载、PE环境创建到驱动注入的完整解决方案,帮助用户顺利完成系统升级或迁移。

weixin_31309419的博客 579

Auto.js实战:从解锁手机到自动阅读的全流程避坑指南(MIUI系统适配版)

本文详细介绍了Auto.js在MIUI系统下的自动化操作全流程优化指南,包括设备唤醒、应用启动、界面交互等关键环节的实战技巧。特别针对MIUI系统的变速检测机制和电源管理策略,提供了有效的避坑方案和性能优化建议,帮助开发者实现从解锁手机到自动阅读的稳定运行。

醉三国 248

安卓系统Chrome内核:Android System WebView

有的安卓浏览器比如“X浏览器”自身是不带Chrome内核的,这时就需要安装较新版本的“Android System WebView”以升级安卓系统的Chrome内核。------旧版网盘下载1:https://down666.lanzoul.com/b01hjlgje 提取码:aw3t。网盘下载1:https://down666.lanzoul.com/b01hjlghc 提取码:7x8i。网盘下载2:https://www.mediafire.com/folder/cimpgytm5w2t8。

qq_43471089的博客 4564

使用 MATLAB/Simulink 对基于同步发电机的双机系统进行建模,并对其在短路故障条件下的暂态稳定性进行仿真和分析

双机系统(Two-Machine System)是电力系统中用于研究动态稳定性和控制策略的一个典型模型。它由两台同步发电机通过输电网络相互连接,模拟实际电网中的互联操作。当发生短路故障时,系统的暂态稳定性会受到挑战,可能导致发电机失步或电压崩溃。本教程将带你使用 MATLAB/Simulink 对基于同步发电机的双机系统进行建模,并对其在短路故障条件下的暂态稳定性进行仿真和分析。

amy_mhd的博客 8507

android使用webView,js调用安卓中的方法

关于安卓调用js中的方法,参看我的文章android使用webView,实现和js中的方法调用 在js中调用安卓的原理其实很简单就是用了 “映射+调用” 首先前端的html界面有如下代码: <a onclick="dianwo()">点我</a> <script type = "text/javascript"> function dianwo(){ duixiang.show("我调用安卓了,duixiang就是安卓的映射对象") ; } </script

无趣的博客 1040

【模型】OpenClaw 接入阿里云永久免费模型方案

Qwen2.5-7B-Instruct 模型为例。

海兰 4475

软考「系统规划与管理师(第2版)」抱佛脚|10 页纸终极压缩包

《系统规划与管理师教程(第2版)》,工业和信息化部教育与考试中心组编,刘玲、张树玲主编,清华大学出版社,2025 年 1 月:综合知识 / 案例分析 / 论文(三科通吃):把 24 章压成“只背采分点”的 10 页密度,每行可考,每表可背:已按第2版教材二次勘正,删除旧版 PIOIS 误用、修正八大过程与服务质量五性、等保定级与知识产权边界全部对齐。

软件行业技术文化交流。 364

Android studio关于WebView控件使用

由于公司需求,所以不得不学习adroid使用webview开发 简单使用 MyHtml.html <!DOCTYPE html> <html> <head> <title>MyHtml.html</title> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" c

博客 1835

第 0 篇|开篇:为什么我们要从 RNN 讲到 Transformer?

本文介绍了NLP模型的发展历程,从早期规则式方法到如今Transformer模型的演进脉络。文章强调理解NLP技术需要从基础模型入手,重点分析了传统机器学习的局限性(无法处理变长有序输入和深层语义关联),以及RNN如何通过循环结构首次实现顺序依赖捕捉。作者指出Transformer之所以成为主流,是因为它通过自注意力机制解决了RNN的核心痛点(低效串行处理和长距离依赖问题)。专栏将采用"从问题到解决方案"的讲解方式,帮助读者建立完整的NLP知识体系,避免孤立学习和盲目追新。全文旨在为初学

记录 IT 领域经验与见解的博客 73

Android安卓webview打开一个网址

Android安卓webview打开一个网址 1.打开AndroidManifest.xml声明网络权限,声明后才能访问网络 2.在布局文件中添加webview控件 <WebViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:id="@+id/wenview"/> 3.在activity中添加逻辑代码 WebView w...

qq_37196621的博客 592

65页PPT全面学习大型汽车集团企业IT信息化(管理架构、应用架构、技术架构)

订单到交付(OTD):借助ERP、MES、LES、SRM、QMS、APS等系统,实现财务与业务一体化、高级排产、生产过程自动化及供应链协同。- 数据标准化:数据标准化是企业信息化建设基石,包括制定统一业务解释和标准、维护管理流程、发布应用等,涉及数据统一定义、分类、编码等内容。- 大数据应用:汽车行业大数据应用涵盖生产、销售、售后等环节,如设备预见性保养、销量预测、质量预警等,提升企业运营效率和决策能力。- 策略明晰:明确C2M管理矩阵,包括供应商、采购、物流、制造、销售、财务等环节的策略。

cdfunlove的博客 1050

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

android webview卸载,安卓WebView清除localStorage

最近项目使用webview来嵌入一个画板,画板上有线条、文字等许多的数据,h5端就通过localStorage将线条数据存储到本地。但是每次用户退出去的时候时需要清除掉原来数据的,我是负责安卓开发,就想在原生部分直接清楚掉webview的localStorage存储。但是在网上找了许多方法,如webView.clearCache(true)、deleteDatabase("WebView.db")...

weixin_33791941的博客 2128

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

安卓webview_Android中的片段:使用WebView的示例教程

安卓webview 在本文中,我们将通过一个真实的例子来说明如何在Android中使用片段。 在上一篇文章中,我们讨论了Android中的Fragment以及如何使用它来支持多屏幕。 我们描述了他们的生命周期以及如何使用它。 在本文中,我们想更深入地创建一个示例,以帮助我们更好地理解如何使用片段。 作为示例,我们要创建一个由两个片段构建的简单应用程序: 显示链接列表的一个 另一个在WebV...

cunfu5234的博客 310

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Android使用webview怎么加载uri_珍爱生命,远离安卓WebView

2019.01.01 更新:解决方法2019.01.06 更新:另外一个同类型bug众所周知,安卓的WebView是个非常坑的控件,这想必不用我说多。花式内存泄漏、生命周期混乱之类,碎片化等等的bug我就不提了然而今天一个发现实在是让我大跌眼镜众所周知,WebView的saveState与restoreState充满了bug。Bug如此之多以至于Google在2014年去除了Webview.res...

weixin_39541212的博客 230

安卓android WebView Memory Leak WebView内存泄漏

Android WebView Memory Leak WebView内存泄漏 在这次开发过程中,需要用到webview展示一些界面,但是加载的页面如果有很多图片就会发现内存占用暴涨,并且在退出该界面后,即使在包含该webview的Activity的destroy()方法中,使用webview.destroy();webview=null;对内存占回收用还是没有任何效果。有人说,一旦在...

dieji7118的博客 209

Android Studio开发安卓app 安卓与webview中的js交互

Android Studio开发安卓app 安卓与webview中的js交互

qq445829096的博客 528
上一篇: 在Laravel中使用自己的类库三种方式
下一篇: java写文件方法之比较
suchfool
博客等级 码龄17年 9粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值