在Android5.0之前辨液,webView默認是允許加載混合網(wǎng)絡協(xié)議內(nèi)容的;在5.0以上蝠筑,默認不允許加載http和https的混合內(nèi)容
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
}
webView無法自動播放H5中的視頻狞膘,在Android4.2之后,添加了允許用戶手勢觸發(fā)音視頻播放的接口什乙,該接口默認為true 挽封,即默認不允許自動播放音視頻,只能是用戶交互的方式由用戶自己觸發(fā)播放臣镣。這樣做可以保護用戶的安全辅愿,也涉及到移動網(wǎng)絡的問題,用戶可能不希望在非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();//忽略證書的錯誤繼續(xù)Load頁面內(nèi)容弃舒,不會顯示空白頁面
//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 { *; }