webView加载回调-setWebViewClient()

1 设置

webView.setWebViewClient(new MyWebViewClient(webView));

2 自定义加载时的回调

/**
     * 自定义回调
     */
    class MyWebViewClient extends BridgeWebViewClient {

        public MyWebViewClient(BridgeWebView webView) {
            super(webView);
        }

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

        @Override
        public void onPageFinished(WebView view, String url) {
            DialogShow.closeDialog();
            addImageClickListner();
            llContent.setVisibility(View.VISIBLE);
            if (ScrollY != 0) {
                webView.scrollTo(ScrollX, ScrollY);
            }

            //这个是一定要加上那个的,配合scrollView和WebView的height=wrap_content属性使用
            int w = View.MeasureSpec.makeMeasureSpec(0,
                    View.MeasureSpec.UNSPECIFIED);
            int h = View.MeasureSpec.makeMeasureSpec(0,
                    View.MeasureSpec.UNSPECIFIED);
            //重新测量
            webView.measure(w, h);

            super.onPageFinished(view, url);
        }
    }

3 必须集成类

/**
 * 如果要自定义WebViewClient必须要集成此类
 * Created by bruce on 10/28/15.
 */
public class BridgeWebViewClient extends WebViewClient {
    private BridgeWebView webView;

    public BridgeWebViewClient(BridgeWebView webView) {
        this.webView = webView;
    }

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        try {
            url = URLDecoder.decode(url, "UTF-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }

        if (url.startsWith(BridgeUtil.YY_RETURN_DATA)) { // 如果是返回数据
            webView.handlerReturnData(url);
            return true;
        } else if (url.startsWith(BridgeUtil.YY_OVERRIDE_SCHEMA)) { //
            webView.flushMessageQueue();
            return true;
        } else {
            return super.shouldOverrideUrlLoading(view, url);
        }
    }

    // 增加shouldOverrideUrlLoading在api》=24时
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            String url = request.getUrl().toString();
            try {
                url = URLDecoder.decode(url, "UTF-8");
            } catch (UnsupportedEncodingException ex) {
                ex.printStackTrace();
            }
            if (url.startsWith(BridgeUtil.YY_RETURN_DATA)) { // 如果是返回数据
                webView.handlerReturnData(url);
                return true;
            } else if (url.startsWith(BridgeUtil.YY_OVERRIDE_SCHEMA)) { //
                webView.flushMessageQueue();
                return true;
            } else {
                return super.shouldOverrideUrlLoading(view, request);
            }
        }else {
            return super.shouldOverrideUrlLoading(view, request);
        }
    }

    @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);

        if (BridgeWebView.toLoadJs != null) {
            BridgeUtil.webViewLoadLocalJs(view, BridgeWebView.toLoadJs);
        }

        //
        if (webView.getStartupMessage() != null) {
            for (Message m : webView.getStartupMessage()) {
                webView.dispatchMessage(m);
            }
            webView.setStartupMessage(null);
        }
    }
}

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Android 中,可以通过 WebViewClient 来监听 WebView加载事件。具体来说,可以通过重写 WebViewClient 的 onPageFinished 方法来实现 WebView 加载成功的回调,示例代码如下: ``` webView.setWebViewClient(new WebViewClient() { @Override public void onPageFinished(WebView view, String url) { // WebView 加载成功的回调 } }); ``` 在 onPageFinished 方法中,第一个参数 view 表示当前 WebView 对象,第二个参数 url 则表示当前 WebView 加载的页面 URL。你可以在方法中添加相应的逻辑来处理 WebView 加载成功后的事件。 除了 onPageFinished 方法,WebViewClient 还提供了其他的一些监听方法,常用的包括: - onPageStarted:WebView 开始加载时的回调。 - onReceivedError:WebView 加载出错时的回调。 - onReceivedSslError:WebView 加载 HTTPS 页面出错时的回调。 你可以根据实际需求重写这些方法,并添加相应的逻辑来实现自己的业务逻辑。具体示例代码如下: ``` webView.setWebViewClient(new WebViewClient() { @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { // WebView 开始加载回调 } @Override public void onPageFinished(WebView view, String url) { // WebView 加载成功的回调 } @Override public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { // WebView 加载出错的回调 } @Override public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) { // WebView 加载 HTTPS 页面出错的回调 } }); ``` 需要注意的是,如果你需要在 WebView加载 HTTPS 页面,可能会遇到证书验证问题。如果你的证书无法通过验证,可以通过重写 onReceivedSslError 方法来处理这个问题,具体实现方式可以参考相关文档。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值