技术标签: android
1、什么是WebView
WebView是Android中UI组件的一种,WebView基于webkit内核(Chromium)。
2、WebView有什么用
WebView可以用来展示网页,并且与网页进行交互。
3、网页的基本组成
1.加载网页。
mWebView.loadUrl("http://www.baidu.com/");
2.加载sd卡中的资源。
mWebView.loadUrl("file://" + Environment.getExternalStorageDirectory().getPath() + "/1/test.html");
3.加载app资源文件种的资源。在src的main文件夹种新建文件夹assets,将要加载的资源放到其中,使用时assets文件夹路径固定写法为:/android_asset/。
mWebView.loadUrl("file://" + "/android_asset/bookmarks.html");
注意,加载sd卡或app资源文件时,路径之前都要加上"file://"。
可以直接将一段html代码加载到WebView当中,参数data是html代码的内容,mimeType是mime类型,参数encoding是编码类型。代码示例如下:
mWebView.loadData("<h1>Hello WebView</h1>", "text/html", "utf-8");
网页的前进或者后退都是基于浏览记录来进行的,通过void clearHistory()方法可以清空浏览记录,浏览记录清空后,所有的前进或后退操作都无法再进行。
通知内核暂停所有操作,包括WebView对hrml页面的解析与javaScript的执行等。
激活WebView为活跃状态,表示可以正常执行网页响应。
销毁WebView。
通过与持有该WebView的Activity的生命周期配合使用,防止Activity推出后WebView依然占用资源。
public class WebViewTestActivity extends AppCompatActivity {
private WebView mWebView;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_web_view_test);
mWebView = findViewById(R.id.activity_web_view_test_web_view);
}
@Override
protected void onPause() {
super.onPause();
mWebView.onPause();
}
@Override
protected void onResume() {
super.onResume();
mWebView.onResume();
}
@Override
protected void onDestroy() {
super.onDestroy();
mWebView.destroy();
}
}
1.WebView是否支持要访问的页面种的JavaScript代码运行。默认不支持,所以会导致JavaScript排版的页面出现混乱。
WebSettings webSettings = mWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
2.WebView是否支持缩放操作。
设置是否支持缩放:
void setSupportZoom(boolean support)
设置内置的缩放控件:
void setBuiltInZoomControls(boolean enabled)
是否隐藏原生的缩放控件:
void setDisplayZoomControls(boolean enabled)
3.WebView对网页的缓存策略。
LOAD_CACHE_ONLY:永远不使用网络,只取本地缓存,没有缓存则不会加载。
LOAD_CACHE_ELSE_NETWORK:只要本地有缓存,无论是否过期都会去使用本地缓存,没有缓存才会去加载网络。
LOAD_DEFAULT:(默认配置)根据cache-control决定是否从网络获取。
LOAD_NO_CACHE:永远不使用缓存,只从网络获取。
通过setCacheMode方法设置缓存策略,如:
WebSettings webSettings = mWebView.getSettings();
webSettings.setCacheMode(WebSettings.LOAD_CACHE_ONLY);
通过clearCache方法可以清除缓存:
void clearCache(boolean includeDiskFiles)
使用WebView时,必须要添加一句:
mWebView.setWebViewClient(new WebViewClient());
因为WebView的默认配置中,网页的重定向都是由系统默认浏览器打开的,如果不加这一句,就会跳转到系统自带的浏览器。只有指定一个新的WebViewClient,才能在APP本地打开重定向的地址。
常用的处理网页加载时的各种回调通知:
进行资源请求的时候回调,可以通过参数request获取url等信息:
WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request)
网页已经开始加载的时候回调:
void onPageStarted(WebView view, String url, Bitmap favicon)
加载网页资源之前回调:
void onLoadResource(WebView view, String url)
网页加载完成的时候回调:
void onPageFinished(WebView view, String url)
这4个回调就构成了WebView加载网页时基本的生命周期。shouleInterceptRequest回调和onPageStarted回调的顺序不一定哪个在前,但是一定都在onLoadResource之前。
WebView将要加载新的URL时进行回调:
boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request)
可以理解为重写跳转到新的URL逻辑,代码示例如下:
mWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
if ("http://www.baidu.com/".equals(request.getUrl().toString())) {
//如果要加载的是百度则移花接木给他换成搜狗
view.loadUrl("http://www.sogou.com/");
//return true表示自己处理要加载的URL而不直接由WebView跳转
return true;
}
//默认返回值为false,表示由WebView处理Url
return super.shouldOverrideUrlLoading(view, request);
}
});
网页发生错误的时候回调:
void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error)
通常在这个回调当中进行错误处理时调用view.loadUrl()将WebView跳转展示错误信息的界面。
下面介绍WebChromeClient中的回调:
1.网页加载过程中的回调
获取网页加载进度的回调(网页加载过程中多次回调,newProgress的值从0到100):
void onProgressChanged(WebView view, int newProgress)
获取网页标题的回调(网页加载过程中回调一次):
void onReceivedTitle(WebView view, String title)
2.网页弹出对话框相关回调
以下3个回调对应JS中的三种对话框,默认的返回值为false,表示由WebView默认处理这次对话框弹出,如果返回值为true,表示由我们自己来处理这次对话框弹出。当我们自己处理对话框弹出操作时,需要调用参数result的confirm()、cancel()等方法来告诉网页我们的处理结果。如果返回值为true而没有调用result的方法通知网页对话框处理结果的话,网页将被阻塞住。
在网页将要打开一个alert警告对话框的时候回调:
boolean onJsAlert(WebView view, String url, String message, JsResult result)
在网页将要打开一个confirm对话框的时候回调:
boolean onJsConfirm(WebView view, String url, String message, JsResult result)
在网页将要打开一个prompt对话框的时候回调:
boolean onJsPrompt(WebView view, String url, String message, String defaultValue, JsPromptResult result)
代码示例:
//示例1
mWebView.loadUrl("javascript:alert(sum(2, 3))");
//示例2
mWebView.evaluateJavascript("javascript:sum(2, 3)", new ValueCallback<String>() {
@Override
public void onReceiveValue(String value) {
//使用Toast弹出sum(2, 3)的结果
Toast.makeText(WebViewTestActivity.this, value, Toast.LENGTH_SHORT).show();
}
});
//todo 抓紧去学一下js,呜呜呜~
文章浏览阅读2.3k次,点赞2次,收藏18次。使用docker安装jdk、tomcat、mysql、nginx_docker安装jdk
文章浏览阅读3.7k次。Http 健康检查通过发送周期健康检查,监视 upstream 组中 HTTP 服务的健康状态。包括有NGINX Plus 的自定义主动健康检查。简介NGINX 和NGINX Plus 能够持续的检测 upstream 中的服务,剔除宕机的服务,还可以优雅的将恢复的的服务添加到负载均衡组群中。前提对于被动健康检查,你需要使用开源 NGINX 或者 NGINX Plus对于主动健康检查和实时活动监视仪表板,你需要使用 NGINX Plus一个HTTP upstream 负载均衡群组被动健康_http健康检查
Linux下Python升级步骤:下载源tar包,安装成功后需修改yum配置,使其正常使用。
文章浏览阅读8.1k次。解决Debian 11系统缺少无线网卡固件rtl8192cfw.bin一,先简单介绍解决办法“rtlwifi/rtl8192cfw.bin”是无线网卡的固件,其实缺少它网卡也是可以用的,只是不知道是不是这个原因导致丢包频繁。在CSDN找到了这篇文章:“U盘安装Debian,提示缺少无线网卡驱动(blog.csdn.net/gaisylly/article/details/50446406)”,然后我找到了一份deb包(ftp.cn.debian.org/debian/pool/non-free/f/fi_firmware-realtek
文章浏览阅读60次。2019独角兽企业重金招聘Python工程师标准>>> ..._哆啦a梦连连看1.6下载
文章浏览阅读2.9k次。流程图,可以说是日常办公中比较常见的一种图表了,开会,有会议流程;采购,有采购流程;财务付款,有付款流程;工作,也有工作流程,可以说它是无处不在。对于普通上班族、白领来说,Office的三个标配Word、Excel、PPT是最常用的工具,但是它却不是最佳的绘制流程图的软件!使用Word、PPT画流程图总是千篇一律,没有特色,如果才能设计出精美、又独具特色的流程图呢?亿图图示设..._word流程图插件
文章浏览阅读1.7k次,点赞3次,收藏22次。点击上方“Python爬虫与数据挖掘”,进行关注回复“书籍”即可获赠Python从入门到进阶共10本电子书今日鸡汤别君去兮何时还?且放白鹿青崖间。须行即骑访名山。1. 前言群控,相信大部..._自己写群控
文章浏览阅读2.5k次,点赞2次,收藏16次。带你真正认识Linux 系统结构Linux系统一般有4个主要部分:内核、shell、文件系统和应用程序。内核、shell和文件系统一起形成了基本的操作系统结构,它们使得用户可以运行程序、管理文件并使用系统。1. linux内核内核是操作系统的核心,具有很多最基本功能,它负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。Linu_带你真正认识linux系统结构
文章浏览阅读4.1w次,点赞74次,收藏840次。Navicat连接Mysql教程 Navica作为一个数据库管理工具,容易上手轻便,这里就当介绍给大家认识认识,同时加深自己的使用过程。文章目录Navicat连接Mysql教程一、检查mysql环境二、测试Navicat连接mysql数据库一、检查mysql环境 在介绍 navicat之前先检查一下 mysql安装环境是否成功。命令行输入:mysql -V出现下图表示你的mysql环境安装是成功的。这个时候我们通过命令行进入mysql查看自己建立过得数据库mysql -_navicat中mysqldump
文章浏览阅读1.8w次,点赞13次,收藏148次。Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。......_springboot
文章浏览阅读103次。C语言字符(&串&数组)处理复习笔记几个函数1.putchar(ch):输出一个字符2.getchar():输入一个字符#include<stdio,h>int main(){ char a,b,c; a = getchar(); b = getchar(); c = getchar(); putchar(a); putchar(b); putchar(c); putchar('\n'); return 0;3.puts(str):输出一个字符串_char str2[] = new char[3]{'w','o','r'}
文章浏览阅读4.9w次,点赞38次,收藏105次。仿射密码是一种表单代换密码,字母表的每个字母相应的值使用一个简单的数学函数对应一个数值,再把对应数值转换成字母。A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 ..._仿射密码