在Android5.0之前,webView默认是允许加载混合网络协议内容的;在5.0以上,默认不允许加载http和https的混合内容
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
}
webView无法自动播放H5中的视频,在Android4.2之后,添加了允许用户手势触发音视频播放的接口,该接口默认为true ,即默认不允许自动播放音视频,只能是用户交互的方式由用户自己触发播放。这样做可以保护用户的安全,也涉及到移动网络的问题,用户可能不希望在非wifi下自动播放。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
//默认为true 是否需要用户手势才能播放视频
webView.getSettings().setMediaPlaybackRequiresUserGesture(false);
}
忽略SSL证书,重写onReceivedSslError()
private class MyWebViewClient extends WebViewClient {
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
//handler.cancel();// 默认的处理方式,WebView变成空白页
handler.proceed();//忽略证书的错误继续Load页面内容,不会显示空白页面
//super.onReceivedSslError(view, handler, error);
}
}
输出webView控制台信息
private class MyWebChromeClient extends WebChromeClient {
@Override
public boolean onConsoleMessage(ConsoleMessage consoleMessage) {
Log.e("控制台信息", consoleMessage.message() + " -- From line " + consoleMessage.lineNumber() + " of " + consoleMessage.sourceId());
return super.onConsoleMessage(consoleMessage);
}
}
向JS注入对象时,偶尔会失败,建议放在onPageStarted()中
private class MyWebViewClient extends WebViewClient {
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
//注入对象
webView.addJavascriptInterface(this, "androidObj");
}
}
和JS交互的Java注入类不要混淆,需要keep
-keepclassmembers class com.xxx.xxx.AndroidInterface { *; }