Android WebView一些特殊的使用

在Android5.0之前,webView默認(rèn)是允許加載混合網(wǎng)絡(luò)協(xié)議內(nèi)容的;在5.0以上,默認(rèn)不允許加載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ā)音視頻播放的接口,該接口默認(rèn)為true ,即默認(rèn)不允許自動播放音視頻,只能是用戶交互的方式由用戶自己觸發(fā)播放。這樣做可以保護(hù)用戶的安全,也涉及到移動網(wǎng)絡(luò)的問題,用戶可能不希望在非wifi下自動播放。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
    //默認(rèn)為true 是否需要用戶手勢才能播放視頻
    webView.getSettings().setMediaPlaybackRequiresUserGesture(false);
}

忽略SSL證書,重寫onReceivedSslError()

private class MyWebViewClient extends WebViewClient {

    @Override
    public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
        //handler.cancel();// 默認(rèn)的處理方式,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 { *; }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容