WebView填坑之旅2--a标签是target=“_blank”时创建新窗口

本文介绍了一种解决WebView中a标签使用_target=_blank导致无法打开新窗口的问题的方法。通过继承WebChromeClient并重写onCreateWindow方法,实现自定义的新窗口打开逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如果网页里链接的a标签是target="_blank",而碰巧你的WebView又没有处理,那这个时候就会出现狂点链接/button页面却无动于衷的情况,给人想砸手机的感觉…
好了,解决方案其实也挺简单的,继承WebChromeClient,重写onCreateWindow是关键,请看代码:

	/**
     * 当网页里a标签target="_blank",打开新窗口时,这里会调用
     */
    @Override
    public boolean onCreateWindow(WebView webView, boolean isDialog, boolean isUserGesture, Message resultMsg) {
        X5WebView newWebView = new X5WebView(activity);
        X5WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj;
        newWebView.setWebChromeClient(new CustomWebChromeClient(activity));
        newWebView.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                if (activity != null) {
                    //拦截url,跳转新窗口=,=
                    Intent intent = new Intent(activity, CommWebActivity.class);
                    intent.putExtra(Constants.INTENT_KEY_URL, url);
                    activity.startActivity(intent);
                }
                //防止触发现有界面的WebChromeClient的相关回调
                return true;
            }
        });
        transport.setWebView(newWebView);
        resultMsg.sendToTarget();

        return true;
//        return super.onCreateWindow(webView, isDialog, isUserGesture, message);
    }

前提要设置这个,不然不会走回调

webSetting.setSupportMultipleWindows(true);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值