写在前面:这段时间公司的App再做嵌入式HTML开发,通过这段时间的整理和趟坑,笔者想分享一下WebView的常用知识。笔者也认同"大前端是未来的大势所趋"的观点。
一、介绍
WebView是一个可以用来加载本地HTML,或者网页链接的Web网页控件,可以理解为一个浏览器。因为WebView的API提供浏览器的基本操作。
PS:Android 4.4之前使用WebKit作为渲染内核,4.4以后统一采用Google的Chrome内核。
二、使用
<!--1.在[../app/src/main/AndroidManifest.xml]中配置网络权限-->
<uses-permission android:name="android.permission.INTERNET"/>
<!--2.在[../app/src/main/res/layout/activity_webview.xml]布局WebView-->
<WebView
android:id="@+id/main_webview"
android:layout_width="match_parent"
android:layout_height="match_parent">
</WebView>
// 3.在[../app/src/main/java/com/macro/xxx/WebViewActivity.java]中配置WebView
mWebView = findViewById(R.id.web_view);
mWebView.loadUrl("https://www.baidu.com/");
mWebView.setWebChromeClient(new WebChromeClient());
mWebView.setWebViewClient(new WebViewClient());
三、常用系统方法(Public methods)
// 注入Java Object到 Webview
public void addJavascriptInterface(Object object, String name)
// WebView是否可以回退
public boolean canGoBack()
// WebView是否可以前进
public boolean canGoForward()
// 清除所有Webview的缓存
public void clearCache(boolean includeDiskFiles)
// 清除前进、后退历史
public void clearHistory()
// 生命周期方法 WebView销毁
public void destroy()
// 异步调用JS, 并且获取返回值
public void evaluateJavascript(String script, ValueCallback<String> resultCallback)
// 获取网页内容高度
public int getContentHeight()
// 获取Setting对象,用于控制Webview
public WebSettings getSettings()
// 获取标题
public String getTitle()
// 获取URL
public String getUrl()
// 获取Chrome client 对象
public WebChromeClient getWebChromeClient()
// 获取WebView Client 对象
public WebViewClient getWebViewClient()
// 返回上一历史
public void goBack()
// 跳转前进后退历史的任意一页
public void goBackOrForward(int steps)
// 前进
public void goForward()
// 加载data,可用于加载html代码段
public void loadData(String data, String mimeType, String encoding)
// 加载URL,可加载本地或网络连接
public void loadUrl(String url)
// 同上,可以加HTTPSHeader
public void loadUrl(String url, Map<String, String> additionalHttpHeaders)
// 生命周期,暂停加载
public void onPause()
// 生命周期,恢复加载
public void onResume()
// 刷新页面
public void reload()
// 移除java接口对象
public void removeJavascriptInterface(String name)
// 设置背景色
public void setBackgroundColor(int color)
// 设置越界滚动模式
public void setOverScrollMode(int mode)
// 设置滚动条样式
public void setScrollBarStyle(int style)
// 设置Chrome Client
public void setWebChromeClient(WebChromeClient client)
// 允许网页内容的Debug (HTML/CSS
public static void setWebContentsDebuggingEnabled(boolean enabled)
// 设置WebView Client
public void setWebViewClient(WebViewClient client)
// 停止加载
public void stopLoading()
四、WebView几个主要对象(WebSettings、WebViewClient、WebChromeClient)
4.1 WebSettings
- 4.1.1 获取WebSettings
WebSettings webSettings = mWebView .getSettings();
- 4.1.2 JS交互相关
// 允许JS交互
public void setJavaScriptEnabled(true);
// 允许插件
public void setPluginsEnabled(true);
// 允许通过JS打开新窗口
public void setJavaScriptCanOpenWindowsAutomatically(true);
- 4.1.3 缩放处理
// 将图片调整到适合webview的大小
public void setUseWideViewPort(true);
// 缩放至屏幕的大小
public void setLoadWithOverviewMode(true);
//支持缩放,默认为true。是下面那个的前提。
public void setSupportZoom(true);
//设置内置的缩放控件。 这个取决于setSupportZoom(), 若setSupportZoom(false),则该WebView不可缩放,这个不管设置什么都不能缩放。
public void setBuiltInZoomControls(true);
//隐藏原生的缩放控件
public void setDisplayZoomControls(false);
4.2 WebViewClient
用于处理通知和各种事件,通过重载方法使用👇
// 网页加载的时候拦截URL
public boolean shouldOverrideUrlLoading(WebView view, String loadUrl);
// 页面开始加载的时候调用
public void onPageStarted(WebView view, String url, Bitmap favicon);
// 页面加载完成的时候调用
public void onPageFinished(WebView view, String url); //在页面加载结束时调用, 我们可以关闭loading 条,切换程序动作。
4.3 WebChromeClient
处理JS的对话框、网址图标、网址标题和加载进度,通过重载方法使用👇
// 进度改变
public void onProgressChanged(WebView view, int newProgress);
// 获取标题
public void onReceivedTitle(WebView view, String title);
// 获取icon
public void onReceivedIcon(WebView view, Bitmap icon);
// 处理alert弹出框
public boolean onJsAlert(WebView view, String url, String message, JsResult result);
// 处理prompt弹出框
public boolean onJsPrompt(WebView view, String url, String message, String defaultValue, JsPromptResult result)
// 处理confirm弹出框
public boolean onJsConfirm(WebView view, String url, String message, JsResult result);