android的WebView、WebViewClient、WebChromeClient的关系

Android之WebView的使用例子——WebSetting、WebViewClient、WebChromeClient 点击查看原文代码直接下载http://download.csdn.net/detail/metis100/8514837 第一步,xml Manifest中要设置网络权限,否则会出先 webpage not available 设置布局R.layout.activity_ma 阅读详情

在WebView的设计中,不是什么事都要WebView类干的,有些杂事是分给其他人的,这样WebView专心干好自己的解析、渲染工作就行了。WebViewClient就是帮助WebView处理各种通知、请求事件的,具体来说包括:

onLoadResource、onPageStart、onPageFinish、onReceiveError、onReceivedHttpAuthRequest;

 

WebChromeClient是辅助WebView处理Javascript的对话框,网站图标,网站title,加载进度等

 onCloseWindow(关闭WebView)、onCreateWindow()、onJsAlert (WebView上alert是弹不出来东西的,需要定制你的WebChromeClient处理弹出)、onJsPrompt、onJsConfirm、onProgressChanged、onReceivedIcon、onReceivedTitle;


下面看看这三者之间的应用关系;

package EOE.android.demo1; 
import java.io.FileOutputStream; 
import android.app.Activity; 
import android.app.AlertDialog; 
import android.app.AlertDialog.Builder; 
import android.content.DialogInterface; 
import android.graphics.Bitmap; 
import android.graphics.Canvas; 
import android.graphics.Picture; 
import android.os.Bundle; 
import android.view.KeyEvent; 
import android.view.View; 
import android.webkit.JsPromptResult; 
import android.webkit.JsResult; 
import android.webkit.WebChromeClient; 
import android.webkit.WebViewClient; 
import android.widget.Button; 
import android.widget.Toast; 


public class MainWebView3 extends Activity { 

/** Called when the activity is first created. */ 

@Override 
public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.main); 

// 定义UI组件 
Button b1 = (Button) findViewById(R.id.Button01); 
Button b2 = (Button) findViewById(R.id.Button02); 
Button b3 = (Button) findViewById(R.id.Button03); 
final WebView wv = (WebView) findViewById(R.id.WebView01); 

// 覆盖默认后退按钮的作用,替换成WebView里的查看历史页面 
wv.setOnKeyListener(new View.OnKeyListener() { 
@Override 
public boolean onKey(View v, int keyCode, KeyEvent event) { 
if (event.getAction() == KeyEvent.ACTION_DOWN) { 
if ((keyCode == KeyEvent.KEYCODE_BACK) && wv.canGoBack()) { 
wv.goBack(); 
return true; 
} 
} 
return false; 
} 


}); 


// 设置支持Javascript 


wv.getSettings().setJavaScriptEnabled(true); 


// 定义并绑定按钮单击监听器 


b1.setOnClickListener(new View.OnClickListener() { 


@Override 
public void onClick(View v) { 


// 加载URL assets目录下的内容可以用 "[url=file:///android_asset]file:///android_asset[/url]" 前缀 


wv.loadUrl("[url=file:///android_asset/html/test1.html]file:///android_asset/html/test1.html[/url]"); 


} 


}); 


// 定义并绑定按钮单击监听器 


b2.setOnClickListener(new View.OnClickListener() { 


@Override 
public void onClick(View v) { 




// 加载URL assets目录下的内容可以用 "[url=file:///android_asset]file:///android_asset[/url]" 前缀 


wv.loadUrl("[url=file:///android_asset/html/test3.html]file:///android_asset/html/test3.html[/url]"); 


} 


}); 


// 定义并绑定按钮单击监听器 


b3.setOnClickListener(new View.OnClickListener() { 


@Override 
public void onClick(View v) { 


Picture pic = wv.capturePicture(); 


int width = pic.getWidth(); 


int height = pic.getHeight(); 


if (width > 0 && height > 0) { 


Bitmap bmp = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); 


Canvas canvas = new Canvas(bmp); 


pic.draw(canvas); 


try { 


String fileName = "sdcard/" + System.currentTimeMillis() + ".png"; 


FileOutputStream fos = new FileOutputStream(fileName); 


if (fos != null) { 


bmp.compress(Bitmap.CompressFormat.PNG, 90, fos); 


fos.close(); 


} 


Toast.makeText(getApplicationContext(), "截图成功,文件名是:" + fileName, Toast.LENGTH_SHORT).show(); 


} catch (Exception e) { 


e.printStackTrace(); 


} 


} 


} 


}); 


// 创建WebViewClient对象 


WebViewClient wvc = new WebViewClient() { 


@Override 
public boolean shouldOverrideUrlLoading(WebView view, String url) { 


Toast.makeText(getApplicationContext(), "WebViewClient.shouldOverrideUrlLoading", Toast.LENGTH_SHORT) .show(); 


// 使用自己的WebView组件来响应Url加载事件,而不是使用默认浏览器器加载页面 


wv.loadUrl(url); 


// 记得消耗掉这个事件。给不知道的朋友再解释一下,Android中返回True的意思就是到此为止吧,事件就会不会冒泡传递了,我们称之为消耗掉 


return true; 


} 


@Override 
public void onPageStarted(WebView view, String url, Bitmap favicon) { 


Toast.makeText(getApplicationContext(), "WebViewClient.onPageStarted", Toast.LENGTH_SHORT).show(); 


super.onPageStarted(view, url, favicon); 


} 


@Override 
public void onPageFinished(WebView view, String url) { 
Toast.makeText(getApplicationContext(), "WebViewClient.onPageFinished", Toast.LENGTH_SHORT).show(); 


super.onPageFinished(view, url); 


} 


@Override 
public void onLoadResource(WebView view, String url) { 


Toast.makeText(getApplicationContext(), "WebViewClient.onLoadResource", Toast.LENGTH_SHORT).show(); 


super.onLoadResource(view, url); 


} 


}; 


// 设置WebViewClient对象 


wv.setWebViewClient(wvc); 


// 创建WebViewChromeClient 


WebChromeClient wvcc = new WebChromeClient() { 


// 处理Alert事件 


@Override 
public boolean onJsAlert(WebView view, String url, String message, final JsResult result) { 


// 构建一个Builder来显示网页中的alert对话框 


Builder builder = new Builder(MainWebView3.this); 


builder.setTitle("计算1+2的值"); 


builder.setMessage(message); 


builder.setPositiveButton(android.R.string.ok, new AlertDialog.OnClickListener() { 


@Override 
public void onClick(DialogInterface dialog, int which) { 


result.confirm(); 


} 


}); 


builder.setCancelable(false); 


builder.create(); 


builder.show(); 


return true; 




} 


@Override 
public void onReceivedTitle(WebView view, String title) { 


MainWebView3.this.setTitle("可以用onReceivedTitle()方法修改网页标题"); 


super.onReceivedTitle(view, title); 


} 


// 处理Confirm事件 


@Override 
public boolean onJsConfirm(WebView view, String url, String message, final JsResult result) { 


Builder builder = new Builder(MainWebView3.this); 


builder.setTitle("删除确认"); 


builder.setMessage(message); 


builder.setPositiveButton(android.R.string.ok, new AlertDialog.OnClickListener() { 


@Override 
public void onClick(DialogInterface dialog, int which) { 


result.confirm(); 


} 


}); 


builder.setNeutralButton(android.R.string.cancel, new AlertDialog.OnClickListener() { 


@Override 
public void onClick(DialogInterface dialog, int which) { 


result.cancel(); 


} 


}); 


builder.setCancelable(false); 


builder.create(); 


builder.show(); 


return true; 


} 


// 处理提示事件 


@Override 
public boolean onJsPrompt(WebView view, String url, String message, String defaultValue, 


JsPromptResult result) { 


// 看看默认的效果 


return super.onJsPrompt(view, url, message, defaultValue, result); 


} 


}; 


// 设置setWebChromeClient对象 


wv.setWebChromeClient(wvcc); 


} 


} 

android WebViewClient与WebChromeClient用法 WebViewClient与WebChromeClient的用法和比较 立即下载

相关推荐

Python气象雷达数据处理实战:用PyCINRAD从基数据到PPI图的完整流程

本文详细介绍了使用PyCINRAD库处理气象雷达基数据并生成PPI图的完整流程,涵盖环境配置、数据读取、反射率与速度数据提取、可视化优化等关键步骤。通过实战案例演示如何从原始雷达数据到专业级PPI图像生成,为气象研究和业务应用提供高效解决方案。

yog99的博客 758

Android 混合开发 WebView使用解析(二)之WebViewClient/WebChromeClient

文章目录1、WebViewClient1)WebViewClient之onPageStarted与onPageFinished2). WebViewClient之shouldOverrideUrlLoading3). WebViewClient之onReceivedError4).WebViewClient之onReceivedSslError5). WebViewClient之shouldInterceptRequest6). WebViewClient之其余函数2、WebChromeClient1).

Venus 的博客 2525

黏菌算法(Slime Mould Algorithm,SMA)

这是一篇关于黏菌算法的总结博客,包含算法思想,算法步骤,求函数最值(Python实现),算法改进等,持续更新ing

weixin_46838605的博客 1万+

webkit下的WebChromeClient

随时随地阅读更多技术实战干货,获取项目源码、学习资料,请关注源代码社区公众号(ydmsq666) 下面摘自开源中国社区WebChromeClient的源码,官方对方法作用和参数的解释非常详细,直接看英文注释理解更深刻,就不翻译了: WebChromeClient: /** * Copyright (C)...

孤云博客 2213

创新实训项目博客:基于LoRA的医疗大模型高效微调实战

预训练大语言模型(LLMs)虽然具备了广泛的知识和一定的通用能力,但在特定领域(如医疗)或特定任务(如遵循特定指令格式进行思考链推理)上,其表现往往不尽如人意。微调(Fine-tuning)能够使模型学习到特定领域的数据分布和任务模式,从而在目标任务上获得更好的性能,使其更贴合实际应用需求。使用Unsloth框架加载并以4-bit量化模型。基于数据集,构建了包含明确思考链引导的训练Prompt。配置了LoRA参数,并使用SFTTrainer在单张T4 GPU上对模型进行了高效微调。

m0_73556916的博客 1290

HIL(硬件在环)技术汇总梳理

HIL(Hardware-in-the-Loop)测试领域的知名公司有dSPACE、NI、Vector和speedgoat等,本文是针对这几家HIL技术的对比分析。

Mr.Cssust的博客 3686

Android WebChromeClient

主程序:  public class WebPageLoader extends Activity{ final Activity activity = this; @Override public void onCreate(Bundle savedInstanceState) { sup

Linda的专栏 3225

7.5华为OD机试真题 新系统 - 省超足球比赛获胜队伍计算 (Java/Py/C/C++/Js/Go)

7.5华为OD机试真题 新系统 - 省超足球比赛获胜队伍计算 (Java/Py/C/C++/Js/Go)

算法大师! 819

WebView,WebViewClient,WebChromeClient

这三者有何关系? 在WebView的设计中,不是什么事都要WebView类干的,有些杂事是分给其他人的,这样WebView专心干好自己的解析、渲染工作就行了。WebViewClient就是帮助WebView处理各种通知、请求事件的,具体来说包括:   onLoadRe

552

什么是 SAP Build Process Automation?

SAP Build Process Automation 是一款综合性的低代码工具,允许企业用户快速开发和自动化端到端业务流程。它整合了工作流管理、任务自动化和人工智能技术,提供了一个易于使用的平台,帮助企业更好地应对现代商业挑战。通过该工具,用户无需具备深厚的编程技能即可创建复杂的业务流程。例如,用户可以使用直观的拖放式界面设计流程、设置触发条件、定义任务分配规则,并通过内置的分析功能对流程效率进行评估。流程建模与设计:提供图形化界面,帮助用户直观地设计业务流程。任务自动化。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1258

轴承故障诊断领域的论文到底有多水

这个是最让人困惑的,就好像你说自己证明了某个方法更好,但是你却没有交代自己怎么做的,或者说你交代的过程有外行话或者逻辑上的缺陷,但是你就这么给出个结果完事了。由于自己没有足够大的学术交流圈子,为了尽量避免误判,我在原来13篇论文的基础上又读了18篇,这些论文至少都出自中文核心,有一些还有EI的title,事实上近几年能找到的文章也不算多,这些基本能说明问题了。当然,还有更多细节,比如说损失函数你得交代吧,模型超参数得介绍全吧,至少数据集是哪个工况下的得说吧,当你想复现这些论文,关注点在这些地方的时候。

weixin_50642818的博客 3052

WebView,WebViewClient,WebChromeClient区别(转载)

这三者有何关系? 在WebView的设计中,不是什么事都要WebView类干的,有些杂事是分给其他人的,这样WebView专心干好自己的解析、渲染工作就行了。WebViewClient就是帮助WebView处理各种通知、请求事件的,具体来说包括: onLoadResource onPageStart onPageFinish onReceiveError onRec...

weixin_30293135的博客 83

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Android App开发学习第二十八天:WebView(网页视图)基本用法

本节给大家带来的是Android中的一个用于显示网页的控件:WebView(网页视图)。 现在Android应用 层开发的方向有两种:客户端开发和HTML5移动端开发! 所谓的HTML5端就是:HTML5 + CSS + JS来构建 一个网页版的应用,而这中间的媒介就是这个WebView,而Web和网页端可以通过JS来进行交互,比如, 网页读取手机联系人,调用手机相关的API等! 而且相比起普通的客户端开发,HTML5移动端有个优势: 可以用百分比来布局,而且如果HTML5端有什么大改,我们不用像客户端那样

NikerunZoo的博客 697

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

181.WebViewClient 和 WebChromeClient (WebVIew)

二者通常会同时设置,以达到更完善的页面控制,既让网页在内部加载时得到妥善处理,也能为用户提供动态反馈,比如在 actionbar 中显示网页标题或使用进度条显示页面加载情况。当二者配合使用时,WebView 能够同时处理后台加载逻辑和前端交互细节,确保用户不仅在内容加载上得到完整控制,同时在视觉和交互体验上也达到原生的标准。──────────────────────────────────────────── 【4. WebViewClient 与 WebChromeClient 的区别与协同】

2303_79132118的博客 1611

jre9下载 jdk9

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

Android WebView开发(三)--WebViewClient 与WebChromeClient的使用

1.前言 2.WebViewClient类 2.1 WebViewClient作用: 2.2 WebViewClient 常用方法 : 2.2.1 shouldOverrideUrlLoading()方法 3.WebChromeClient类 3.1 WebChromeClient 作用: 3.2 WebChromeClient 常用方法: 1.前言 前两篇我们讲解了 And...

Simon_Crystin的博客 3047

Android中使用WebView, WebChromeClient和WebViewClient加载网页

本文转载自:http://www.cnblogs.com/lm3515/archive/2011/03/14/1984091.html 作者:lm3515 转载请注明该声明。在android应用中,有时要加载一个网页,如果能配上一个进度条就更好了,而android中提供了其很好的支持,下面是一个例子程序,先帖: <?xml version="1.0" encoding="u...

CHCH998的博客 191

Android之WebViewClient与WebChromeClient的区别

ANDROID应用开发的时候可能会用到WEBVIEW这个组件,使用过程中可能会接触到WEBVIEWCLIENT与WEBCHROMECLIENT,那么这两个类到底有什么不同呢? WebViewClient主要帮助WebView处理各种通知、请求事件的,比如: onLoadResource onPageStart onPageFinish onReceiveError onReceiv

shenqi_sh的专栏 577

关于android WebViewClient和WebChromeClient

一、Android之WebViewClient与WebChromeClient的区别 ANDROID应用开发的时候可能会用到WEBVIEW这个组件,使用过程中可能会接触到WEBVIEWCLIENT与WEBCHROMECLIENT,那么这两个类到底有什么不同呢? WebViewClient主要帮助WebView处理各种通知、请求事件的,比如: onLoadResou

jackyhuangch的专栏 3万+

WebView更改错误显示页面之WebChromeClient

最近项目中UI提了一个小要求自定义WebView的错误显示页面,于是上网查资料后发现要在WebViewClient的onReceivedError()的方法里面进行修改 like this mWebView.setWebViewClient(new WebViewClient(){ @SuppressWarnings("deprecation") @Override

qypcyj的博客 894

android WebView, WebChromeClient和WebViewClient加载网页基本用法

WebView, WebChromeClient和WebViewClient加载网页基本用法  webview是android中的浏览器控件,在一些手机应用中常会用到b/s模式去开发应用,这时webview的强大功能就会显示出来。  1、webview的几点设置    权限设置:.AndroidManifest.xml中必须使用许可"android.permi...

weixin_34365417的博客 208
上一篇: Dalvik VM (DVM) 和Java VM (JVM)之间的区别
下一篇: Android中Handler、Thread(HanlderThread)、Runnable之间的关系
libaohan
博客等级 码龄19年 42粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值