- 重定向問題
通過setWebViewClient方法重寫WebViewClientEx內(nèi)部的shouldOverrideUrlLoading(WebView view, String url)方法控制頁面跳轉(zhuǎn)署尤。
WebView.HitTestResult hitTestResult = view.getHitTestResult();
通過hitTestResult.getType()判斷重定向類型签则,類型如下欢策;
網(wǎng)頁首次進入自動重定向 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常見的相關(guān)設置
// 調(diào)試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%挣柬,防止修改系統(tǒng)字體后造成的正文布局錯亂
webView.getSettings().setTextZoom(100);
webView.getSettings().setLoadWithOverviewMode(true);
webView.getSettings().setDomStorageEnabled(true);
webView.getSettings().setAppCacheEnabled(true);
//無網(wǎng)時取本地緩存
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);
}
});