WebView相关设置

  1. 重定向问题

通过setWebViewClient方法重写WebViewClientEx内部的shouldOverrideUrlLoading(WebView view, String url)方法控制页面跳转。

WebView.HitTestResult hitTestResult = view.getHitTestResult();
通过hitTestResult.getType()判断重定向类型,类型如下;
网页首次进入自动重定向 getType = 0

/**
 * Default HitTestResult, where the target is unknown.
 */
public static final int UNKNOWN_TYPE = 0;
/**
 * @deprecated This type is no longer used.
 */
@Deprecated
public static final int ANCHOR_TYPE = 1;
/**
 * HitTestResult for hitting a phone number.
 */
public static final int PHONE_TYPE = 2;
/**
 * HitTestResult for hitting a map address.
 */
public static final int GEO_TYPE = 3;
/**
 * HitTestResult for hitting an email address.
 */
public static final int EMAIL_TYPE = 4;
/**
 * HitTestResult for hitting an HTML::img tag.
 */
public static final int IMAGE_TYPE = 5;
/**
 * @deprecated This type is no longer used.
 */
@Deprecated
public static final int IMAGE_ANCHOR_TYPE = 6;
/**
 * HitTestResult for hitting a HTML::a tag with src=http.
*/
public static final int SRC_ANCHOR_TYPE = 7;
/**
 * HitTestResult for hitting a HTML::a tag with src=http +  HTML::img.
 */
public static final int SRC_IMAGE_ANCHOR_TYPE = 8;
/**
 * HitTestResult for hitting an edit text area.
 */
public static final int EDIT_TEXT_TYPE = 9;

2。 webview常见的相关设置

// 调试WebView
if (BuildConfig.DEBUG && Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
    if (0 != (BaseApplication.getInstance().getApplicationInfo().flags &= ApplicationInfo.FLAG_DEBUGGABLE)) {
        WebView.setWebContentsDebuggingEnabled(true);
    }
}

webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setDatabaseEnabled(false);
webView.getSettings().setSaveFormData(true);
webView.getSettings().setSavePassword(true);
webView.getSettings().setBuiltInZoomControls(true);
webView.getSettings().setAllowFileAccess(true);
webView.getSettings().setUseWideViewPort(true);
// 限制正文字体大小为100%,防止修改系统字体后造成的正文布局错乱
webView.getSettings().setTextZoom(100); 
webView.getSettings().setLoadWithOverviewMode(true);
webView.getSettings().setDomStorageEnabled(true);
webView.getSettings().setAppCacheEnabled(true);
//无网时取本地缓存
if (!NetUtils.checkNetwork()) {
    webView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
} else {
    // load online by default
    webView.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT); 
}
webView.getSettings().setDisplayZoomControls(false);
webView.getSettings().setGeolocationEnabled(true);        webView.getSettings().setGeolocationDatabasePath(webView.getContext().getCacheDir().toString());       webView.getSettings().setUserAgentString(NetUtils.getUserAgent(true));

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_COMPATIBILITY_MODE);
}

WebChromeClient webChromeClient = new WebChromeClientEx(webView) {
    @Override
    public void onReceivedTitle(WebView view, String title) {
        super.onReceivedTitle(view, title);
    }

    @Override
    public void onShowCustomView(View view, CustomViewCallback callback) {
                
    }

    @Override
    public void onHideCustomView() {
                
    }
};
webView.setWebChromeClient(webChromeClient);
webView.setWebViewClient(new WebViewClientEx(webView) {

    @Override
    public WebResourceResponse shouldInterceptRequest(WebView view, String url) {
        return super.shouldInterceptRequest(view, url);
    }

    @Override
    public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
        return super.shouldInterceptRequest(view, request);
    }

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        return super.shouldOverrideUrlLoading(view,url);
    }

    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) {
        super.onPageStarted(view, url, favicon);
    }

    @Override
    public void onPageFinished(WebView view, String url) {
        super.onPageFinished(view, url);
    }

    @Override
    public void onReceivedHttpAuthRequest(WebView view, HttpAuthHandler handler, String host, String realm) {
        super.onReceivedHttpAuthRequest(view, handler, host, realm);
    }

    @Override
    public void onReceivedHttpError(WebView view, WebResourceRequest request, WebResourceResponse errorResponse){
        super.onReceivedHttpError(view, request, errorResponse);
    }
    
    @TargetApi(android.os.Build.VERSION_CODES.M)
    @Override
    public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
        super.onReceivedError(view, request, error);
        onReceivedError(view, error.getErrorCode(), error.getDescription().toString(), request.getUrl().toString());
    }

    @SuppressWarnings("deprecation")
    @Override
    public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
        super.onReceivedError(view, errorCode, description, failingUrl);
    }
});

你可能感兴趣的:(WebView相关设置)