交互文档:https://doc.gxb.io/dcdoc/chang-jian-wen-ti/jiao-hu-xiang-guan.html
1.java:
setWebView(authUrl);
private void setWebView(String url) {
final String[] whiteList = {"taobao://", "alipayqr://", "alipays://", "wechat://", "weixin://", "mqq://", "mqqwpa://", "openApp.jdMobile://"};
WebSettings settings = web_view.getSettings();
//支持JavaScript脚本
settings.setJavaScriptEnabled(true);
//设置WebView支持广泛的视窗
settings.setUseWideViewPort(true);
//支持手势缩放
settings.setBuiltInZoomControls(true);
//设置WebView 支持加载更多格式页面
settings.setLoadWithOverviewMode(true);
//WebView加载页面优先使用缓存加载
settings.setCacheMode(WebSettings.LOAD_NO_CACHE);
//LOAD_CACHE_ONLY: 不使用网络,只读取本地缓存数据
//LOAD_DEFAULT: 根据cache-control决定是否从网络上取数据。
//LOAD_CACHE_NORMAL: API level 17中已经废弃, 从API level 11开始作用同LOAD_DEFAULT模式
//LOAD_NO_CACHE: 不使用缓存,只从网络获取数据.
//LOAD_CACHE_ELSE_NETWORK,只要本地有,无论是否过期,或者no-cache,都使用缓存中的数据。
//主要用于加载网页过程的监听。
web_view.setWebViewClient(new WebViewClient() {
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
handler.proceed(); // 接受所有网站的证书
super.onReceivedSslError(view, handler, error);
}
@Override
//只要重写此方法,就能在本应用中加载网页
public boolean shouldOverrideUrlLoading(WebView view, String url) {
for (String s: whiteList) {
//判断url如果是在Schemes的白名单里,就启动对于的app,如果不是直接加载url
if (url.startsWith(s)) {
try {
Intent intent = Intent.parseUri(url, Intent.URI_INTENT_SCHEME);
intent.addCategory(Intent.CATEGORY_BROWSABLE);
startActivity(intent);
return true;
} catch(Exception e) {
e.printStackTrace();
}
}
}
view.loadUrl(url);
return true;
// return false;//返回值时true的时候控制网页在WebView中去打开,如果为false调用系统浏览器或第三方浏览器
}
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { //收到错误信息的时候,系统执行此操作.//比如当出现404错误码时,我们可以自己写个html放在asset文件夹中,把webView隐藏掉而显示本地的网页。
LogUitl.e("=======setWebView=========onReceivedError:"+description+","+failingUrl+","+errorCode);
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon); //若想在网页开始加载时执行一些操作,重写该方法
LogUitl.e("=======setWebView=========onPageStarted:"+url);
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url); //若想在网页结束时执行一些操作,重写该方法
//todo
LogUitl.e("=======setWebView=========onPageFinished:"+url);
// finish(); //网页加载比较慢出来,不要finish
}
});
web_view.loadUrl(url);
// //主要用于加载网页过程对UI的操作。
// web_view.setWebChromeClient(new WebChromeClient() {
// @Override
// public void onProgressChanged(WebView view, int newProgress) {
// super.onProgressChanged(view, newProgress);//newProgress的值为1到100的整数,我们可以利用这个参数使用ProgressBar或ProgressDialog显示加载进度
// LogUitl.e("=======setWebView=========onProgressChanged:"+newProgress);
// }
//
// @Override
// public void onReceivedTitle(WebView view, String title) {
// super.onReceivedTitle(view, title);//参数title为网页的标题,可以用一个textView来显示。
// LogUitl.e("=======setWebView=========onReceivedTitle:"+title);
// }
// });
}
2.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<include layout="@layout/xjd_title_common_ui"/>
<WebView
android:id="@+id/web_view"
android:layout_width="match_parent"
android:layout_height="match_parent"></WebView>
</LinearLayout>