Android WebView一些特殊的使用

在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 { *; }

你可能感兴趣的:(Android WebView一些特殊的使用)