package yifeiyuan.practice.practicedemos.webview; import android.content.Context; import android.graphics.Bitmap; import android.util.AttributeSet; import android.util.Log; import android.webkit.ConsoleMessage; import android.webkit.JsResult; import android.webkit.WebChromeClient; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.Toast; /** * Created by alanchen on 15/7/23. * * Notice 直接loadurl 不走 shouldOverrideUrlLoading * * 当点击网页里的一个链接,伪流程: ...代表多个 * shouldOverrideUrlLoading * onPageStarted * onProgressChanged * onLoadResource... * onReceivedTitle * onProgressChanged... * onPageFinished * */ public class YWebView extends WebView { public static final String TAG = YWebView.class.getSimpleName(); private WebViewClient mWebViewClient; private WebChromeClient mWebChromeClient; public YWebView(Context context) { this(context, null); } public YWebView(Context context, AttributeSet attrs) { this(context, attrs, 0); } public YWebView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } private void init() { mWebChromeClient = new YWebChromeClient(); mWebViewClient = new YWebViewClient(); setWebChromeClient(mWebChromeClient); setWebViewClient(mWebViewClient); } private class YWebChromeClient extends WebChromeClient{ @Override public void onProgressChanged(WebView view, int newProgress) { super.onProgressChanged(view, newProgress); Log.d(TAG, "onProgressChanged() called with " + "view = [" + view + "], newProgress = [" + newProgress + "]"); if (mCallback != null) { mCallback.onProgressChanged(newProgress); } } @Override public void onReceivedTitle(WebView view, String title) { super.onReceivedTitle(view, title); Log.d(TAG, "onReceivedTitle() called with " + "view = [" + view + "], title = [" + title + "]"); if (mCallback != null) { mCallback.onReceivedTitle(title); } } @Override public boolean onJsAlert(WebView view, String url, String message, JsResult result) { Log.d(TAG, "onJsAlert() called with " + "view = [" + view + "], url = [" + url + "], message = [" + message + "], result = [" + result + "]"); return super.onJsAlert(view, url, message, result); } @Override public boolean onConsoleMessage(ConsoleMessage consoleMessage) { Log.d(TAG, "onConsoleMessage() called with " + "consoleMessage = [" + consoleMessage + "]"); return super.onConsoleMessage(consoleMessage); } } private class YWebViewClient extends WebViewClient{ @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { Log.d(TAG, "shouldOverrideUrlLoading() called with " + "view = [" + view + "], url = [" + url + "]"); return super.shouldOverrideUrlLoading(view, url); } @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { Log.d(TAG, "onPageStarted() called with " + "view = [" + view + "], url = [" + url + "], favicon = [" + favicon + "]"); super.onPageStarted(view, url, favicon); } @Override public void onPageFinished(WebView view, String url) { Log.d(TAG, "onPageFinished() called with " + "view = [" + view + "], url = [" + url + "]"); super.onPageFinished(view, url); } @Override public void onLoadResource(WebView view, String url) { Log.d(TAG, "onLoadResource() called with " + "view = [" + view + "], url = [" + url + "]"); super.onLoadResource(view, url); } @Override public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { Log.d(TAG, "onReceivedError() called with " + "view = [" + view + "], errorCode = [" + errorCode + "], description = [" + description + "], failingUrl = [" + failingUrl + "]"); if (ERROR_FILE_NOT_FOUND == errorCode) { Toast.makeText(view.getContext(),"加载出错", Toast.LENGTH_SHORT).show(); } super.onReceivedError(view, errorCode, description, failingUrl); } } public void setCallback(Callback mCallback){ this.mCallback = mCallback; } private Callback mCallback; public interface Callback{ void onReceivedTitle(String title); void onProgressChanged(int newProgress); } }