优化WebView页面

WebView包含基础的HTML显示功能, 使用时, 需要进行多方面的优化. (1) 常用设置 (2) 网页客户端 (3) 浏览器客户端 (4) 滚动条 (5) 获取网页内容

Code:

package me.chunyu.Pedometer.base;import android.annotation.SuppressLint;import android.content.Context;import android.util.AttributeSet;import android.util.Log;import android.view.View;import android.webkit.JavascriptInterface;import android.webkit.JsResult;import android.webkit.WebChromeClient;import android.webkit.WebSettings;import android.webkit.WebView;import android.webkit.WebViewClient;/** * 用于控制WebView的View * 由于使用WebView的类型太多,如Activity,,Fragment,DialogFragment等 * 因此将WebView的功能独立出来作为一个View * * @author MasaWong * @author wangchenlong */@SuppressWarnings({“unused”, “WeakerAccess”}){String TAG = “DEBUG-WCL: ” + PedoWebView.class.getSimpleName();@SuppressWarnings(“SpellCheckingInspection”)String JS_PROCESS_TAG = String HTML_CONTENT = “javascript:window.” + JS_PROCESS_TAG+ “.processHTML(‘<head>’+document.getElementsByTagName(‘html’)[0].innerHTML+'</head>’);”;private ReceivedTitleListener mReceivedTitleListener;private PageFinishedListener mPageFinishedListener;private ReceivedErrorListener mReceivedErrorListener;private UrlLoadingListener mUrlLoadingListener;private JsAlertListener mJsAlertListener;public PedoWebView(Context context) {super(context);if (!isInEditMode())init();}public PedoWebView(Context context, AttributeSet attrs) {super(context, attrs, 0);if (!isInEditMode())init();}public PedoWebView(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);// 资源显示if (!isInEditMode())init();}/*** 构造函数,配置WebView*/@SuppressLint(“AddJavascriptInterface”)() {// clearView() is deprecated, but onBackPressed returns to about:blank//noinspection deprecationclearView();setWebViewClient();setWebChromeClient();setWebViewSettings();setHorizontalScrollBarEnabled(false);// 滚动条不占位setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);addJavascriptInterface(new MyJavaScriptInterface(), JS_PROCESS_TAG);}/*** 配置WebView参数*/@SuppressLint(“SetJavaScriptEnabled”)() {WebSettings settings = getSettings();// User settingssettings.setJavaScriptEnabled(true); // 允许弹窗settings.setLoadsImagesAutomatically(true);settings.setUseWideViewPort(true);settings.setLoadWithOverviewMode(false);// Technical settingssettings.setSupportMultipleWindows(true); // 支持多窗口settings.setAppCacheEnabled(true);settings.setDatabaseEnabled(true);settings.setDomStorageEnabled(true);// 优先使用缓存settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);}/*** 配置WebViewClient来处理网页加载的各种状态*/() {WebViewClient webClient = new WebViewClient() {(WebView view, String url) {getSettings().setBlockNetworkImage(false);if (mPageFinishedListener != null) {mPageFinishedListener.overridePageFinished(view, url);}loadUrl(HTML_CONTENT); // 加载JS内容}(WebView view, int errorCode, String description, String failingUrl) {if (mReceivedErrorListener != null) {mReceivedErrorListener.overrideReceivedError(view, errorCode,description, failingUrl);}}(WebView view, String url) {return mUrlLoadingListener != null &&mUrlLoadingListener.overrideUrlLoading(view, url);}};setWebViewClient(webClient);}/*** 获得JS的内容*/class MyJavaScriptInterface {@JavascriptInterface@SuppressWarnings(“unused”)(String html) {Log.d(TAG, “咨询医生的H5页面: ” + html);}}/*** 配置WebChromeClient来处理JsAlert,用于从网页取得一些复杂的数据*/() {WebChromeClient webChromeClient = new WebChromeClient() {(WebView view, String title) {if (mReceivedTitleListener != null) {mReceivedTitleListener.onReceivedTitle(view, title);}}(WebView view, String url, String message, JsResult result) {return mJsAlertListener != null &&mJsAlertListener.overrideJsAlert(view, url, message, result);}};setWebChromeClient(webChromeClient);}/*** 加载Url** @param url 需要加载的url*/(String url) {// 把图片加载放在最后来加载渲染getSettings().setBlockNetworkImage(true);super.loadUrl(url);}(ReceivedTitleListener receivedTitleListener) {mReceivedTitleListener = receivedTitleListener;}(PageFinishedListener pageFinishedListener) {mPageFinishedListener = pageFinishedListener;}(ReceivedErrorListener receivedErrorListener) {mReceivedErrorListener = receivedErrorListener;}(UrlLoadingListener urlLoadingListener) {mUrlLoadingListener = urlLoadingListener;}(JsAlertListener jsAlertListener) {mJsAlertListener = jsAlertListener;}{void onReceivedTitle(WebView view, String title);}{void overridePageFinished(WebView view, String url);}{void overrideReceivedError(WebView view, int errorCode, String description,String failingUrl);}{boolean overrideUrlLoading(WebView view, String url);}{boolean overrideJsAlert(WebView view, String url, String message, JsResult result);}}

参考:

又或者是后天的,我们不断学习,努力进取的路途中辛苦寻到的武器。

优化WebView页面

相关文章:

你感兴趣的文章:

标签云: