Android WebView 常用API参考手册

本文档详尽地介绍了Android WebView的各种API用法,包括基本方法、网页加载、JS交互、导航控制、缓存设置、权限处理等。通过示例代码展示了如何使用WebViewClient和WebChromeClient,以及如何处理网页加载错误、JavaScript交互、页面缩放等问题。同时,还涵盖了WebSettings的配置,如缓存模式、屏幕自适应、JavaScript支持等。此外,还讲解了Cookie管理、WebResourceRequest和WebResourceResponse的处理,帮助开发者全面掌握WebView的使用。
摘要由CSDN通过智能技术生成

1.WebView

基本方法

getUrl

public String getUrl(); //获取当前网页的url

需要注意,通过这个方法获取的url并不一定就是当前WebView正在加载的url。因为可能在调用这个方法的时候,url对应的网页还未加载完毕,那么获得的就是旧的url。

getOriginalUrl

public String getOriginalUrl(); //获得当前网页的原始url

之所以会有原始url的概念,是因为某些网页会执行重定向操作,那么通过这个方法获取的就是重定向之前的url。此外,这个方法和getUrl类似,如果当前网页还未加载完毕,那么获得的就是旧的原始url。

getTitle

public String getTitle(); //获得当前网页的标题

getFavicon

public Bitmap getFavicon(); //获得当前网页的图标

getProgress

public int getProgress(); //获得当前网页的加载进度(0-100)

setNetworkAvailable

//设置当前网络是否可用
//networkUp:当前网络是否可用
public void setNetworkAvailable(boolean networkUp);

通过这个方法可以设置当前网络是否可用,借此触发HTML5和JS的online/offline模式,但是并不会对WebView的网络访问产生实质性影响。

setInitialScale

//设置WebView的缩放等级
//scaleInPercent:缩放等级
public void setInitialScale(int scaleInPercent);

scaleInPercent是缩放等级,如果传入50,代表缩小1倍;如果传入200,代表放大1倍。注意,如果传入0,代表启用默认模式,缩放等级取决于setUseWideViewPort和setLoadWithOverviewMode两个方法的传入值。

网页加载

loadUrl

//url:本次加载的地址
public void loadUrl(String url);

//携带请求头信息加载url
//additionalHttpHeaders:保存请求头信息
public void loadUrl(String url, Map<String, String> additionalHttpHeaders);

loadUrl用于加载指定url,这个url可以是远程网页的链接,也可以是本地的资源链接,大致有以下几种格式:

  1. 加载assets下的资源:file:///android_asset/
  2. 加载res下的资源:file:///android_res/
  3. 加载raw下的资源:file:///android_res/raw/
  4. 加载sdcard下的资源:file:/sdcard/或file:///sdcard/或content://com.android.htmlfileprovider/sdcard/

loadData

//以字符串形式加载html片段
//data:html片段
//mimeType:数据类型,如"text/html"
//encoding:数据编码,有两种可选值("base64"和其他任何值),分别代表base64编码和URL编码
public void loadData(String data, String mimeType, String encoding);

为mimeType传入null和传入”text/html”意义相同。为encoding传入除”base64”外的任何值,都相当于是指定数据编码为URL编码,一般传入null即可。

需要注意,如果data中包含中文,结果将显示为乱码,需要为mimeType传入"text/html;charset=UTF-8"

此外,data中的’#’,’%’,’\’,’?’应该分别被替换为%23,%25,%27,%3f

loadDataWithBaseURL

//以字符串形式加载html片段
//baseUrl:基础url,传入null相当于传入了"about:blank"
//data:html片段
//mimeType:数据类型,如"text/html"
//encoding:数据编码,有两种可选值("base64"和其他任何值),分别代表base64编码和URL编码
//historyUrl:历史url
public void loadDataWithBaseURL(String baseUrl, String data,String mimeType, String encoding, String historyUrl);

loadUrlWithBaseURL方法和loadData类似,主要是用于解决Javascript的同源限制问题。实际上,如果为baseUrl和history传入null,那么loadUrlWithBaseURL和loadData方法作用相同,并且加载中文数据不会出现乱码的问题。

postUrl

//以post请求的形式访问url
//postData:本次post请求携带的数据,必须是application/x-www-form-urlencoded编码
public void postUrl(String url, byte[] postData);

如果传入的url不是一个远程网页地址,那么最终将通过loadUrl方法加载这个url,同时postData参数会被忽略。

刷新页面和停止加载

public void reload(); //刷新页面(当前页面的所有资源都会重新加载)
public void stopLoading(); //停止加载

JS相关

addJavascriptInterface

//为JS添加Java映射对象
//object:Java映射对象,包含Javascript需要调用的方法
//name:object在Javascript中的映射名称
public void addJavascriptInterface(Object object, String name);

这个方法需要在WebSettings调用setJavaScriptEnabled(true)启用JS功能后才有意义。用于为JS添加Java映射对象,JS可以借助这个映射对象调用Java代码。

removeJavascriptInterface

//移除JS中的Java映射对象
//name:Java对象的映射名称
public void removeJavascriptInterface(String name);

evaluateJavascript

//用于Android异步执行JS代码 [Android 4.4(API 19)及以上可用]
//script:需要执行的JS代码
//resultCallback:用于提供JS方法的返回值
public void evaluateJavascript(String script, ValueCallback<String> resultCallback);

这种方式使用起来很简单,只要按照正确的格式传入一个字符串即可。格式:(javascript:JS方法名)。需要注意,被调用的方法需要已在当前页面定义或者已经引入当前页面(JS系统方法也可以)

需要注意,这个方法只能在UI线程中调用,最终resultCallback的回调方法也会在UI线程中执行。

导航功能

基础操作

public boolean canGoBack(); //判断是否可以后退
public void goBack(); //后退
public boolean canGoForward(); //判断是否可以前进
public void goForward(); //前进

指定后退/前进步数

//判断是否可以后退/前进相应步数
public boolean canGoBackOrForward(int steps); 

//后退/前进相应步数
public void goBackOrForward(int steps); 

steps大于0表示前进(forward),小于0表示后退(back)。

网页查找

setFindListener

//为WebView注册查找监听器
//listener:查找监听器。会在每次执行findAll、findNext、findAllAsync方法后触发onFindResultReceived方法。
public void setFindListener(FindListener listener);

findAll

//在当前网页中寻找所有的匹配内容并高亮显示它们 [Android 4.1(API 16)及以上已弃用]
//find:需要查找的目标内容
//return:返回已查找到的目标数目
public int findAll(String find);

这个方法会阻塞UI线程,在Android 4.1及以上推荐使用findAllAsync方法代替。

findAllAsync

//在当前网页中异步寻找所有匹配内容并高亮显示它们 [Android 4.1(API 16)及以上可用]
//find:需要查找的目标内容
public void findAllAsync(String find);

这个方法异步执行,不会阻塞UI线程。

findNext

//跳转到下一个高亮显示的匹配内容
//forward:跳转的方向。true为向下查找,false为向上查找。
public void findNext(boolean forward);

这个方法需要在findAllAsync方法执行后才能调用,否则不会生效。

clearMatches

//清除当前高亮显示的所有匹配内容
public void clearMatches();

离线保存网页

//将当前网页保存下来(一般以.mht文件的形式)
//filename:离线网页的文件名。
public void saveWebArchive(String filename);

//将当前网页保存下来(一般以.mht文件的形式)
//basename:离线网页的基础文件名。
//autoname:是否自动生成文件名。如果autoname为false,basename就必须是一个完整的合法文件名;否则,basename将会是一个文件夹,离线网页的文件名会根据url自动生成。
//callback:回调器。
public void saveWebArchive(String basename, boolean autoname, ValueCallback<String> callback);

callback会在离线网页保存完成后回调自己的onReceiveValue方法。如果保存成功,onReceiveValue的参数将会是离线网页的文件名;如果保存失败,onReceiveValue的参数将会是null。

翻页

//向上翻页(默认滚动半屏的距离)
//top:如果为true将直接跳转到页面顶部
//return:如果页面发生滚动将返回true,否则返回false
public boolean pageUp(boolean top);

//向下翻页(默认滚动半屏的距离)
//bottom:如果为true将直接跳转到页面底部
//return:如果页面发生滚动将返回true,否则返回false
public boolean pageDown(boolean bottom);

缩放

//放大页面
//return:如果页面成功放大,将返回true,否则返回false
public boolean zoomIn();

//缩小页面
//return:如果页面成功缩小,将返回true,否则返回false
public boolean zoomOut();

//按照指定比例缩放页面
//缩放比例(0.01-100)
public void zoomBy(float zoomFactor);

清除数据

clearCache

//清除缓存
//includeDiskFiles:传入false仅清除内存缓存,传入true将同时清除内存和磁盘缓存
public void clearCache(boolean includeDiskFiles);

clearHistory

public void 
Android WebView 是一个用于在应用程序中显示 Web 内容的组件。以下是 Android WebView 常用用法: 1. 加 URL:使用 WebView 加载 URL 可以通过调用 loadUrl() 方法来实现,例如: ``` webView.loadUrl("https://www.example.com"); ``` 2. 加载本地文件:使用 WebView 加载本地文件可以调用 loadUrl() 方法并传递文件的本地路径,例如: ``` webView.loadUrl("file:///android_asset/index.html"); ``` 3. 监听页面加载状态:可以使用 WebViewClient 类的 onPageStarted 和 onPageFinished 方法来监听页面加载状态,例如: ``` webView.setWebViewClient(new WebViewClient() { @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { // 页面开始加载时执行的操作 } @Override public void onPageFinished(WebView view, String url) { // 页面加载完成时执行的操作 } }); ``` 4. 向 WebView 中注入 JavaScript:可以使用 WebView 的 loadUrl() 方法向 WebView 中注入 JavaScript,例如: ``` webView.loadUrl("javascript:alert('Hello, world!')"); ``` 5. 调用 WebView 中的 JavaScript 方法:可以使用 WebView 的 evaluateJavascript() 方法调用 WebView 中的 JavaScript 方法,例如: ``` webView.evaluateJavascript("javascript:myFunction()", new ValueCallback<String>() { @Override public void onReceiveValue(String value) { // 处理 JavaScript 方法返回的结果 } }); ``` 6. 启用 JavaScript:可以通过调用 WebView 的 setJavaScriptEnabled() 方法来启用 JavaScript,例如: ``` webView.getSettings().setJavaScriptEnabled(true); ``` 7. 启用缩放功能:可以通过调用 WebView 的 setBuiltInZoomControls() 方法启用缩放功能,例如: ``` webView.getSettings().setBuiltInZoomControls(true); ``` 8. 自定义 WebViewClient:可以通过继承 WebViewClient 类并重写其中的方法来自定义 WebViewClient,例如: ``` private class MyWebViewClient extends WebViewClient { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { // 在 WebView 中打开链接 view.loadUrl(url); return true; } } webView.setWebViewClient(new MyWebViewClient()); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值