跳到正文
Pollex's blog
返回

WebView的奇怪现象

最近做项目发现WebView有一些奇奇怪怪的现象,在这里记录下。

一、Android版本4.4及一下,默认情况下”_blank”打开新标签页异常

H5通过_blank标签打开新标签页的时候,Android5.0及以上会在当前页面直接load这个url,但是Android版本4.4及一下,则会在当前的标签里面加载这个新页面! 查了下资料,发现了能统一的办法。 第一步:设置WebSetting的setSupportMultipleWindows(true):

// 告诉webkit:你问我多窗口滋不滋次啊,我当然是滋次的!
webSettings.setSupportMultipleWindows(true);

第二步:在WebChromeClient中监听onCreateWindow()方法,判断参数符合条件就拦截并获取到打开新页面的url,让当前页面加载,要注意的事,点击页面链接,也属于打开心标签,在这里也会被拦截的:

// 我不但要拦住你的去路(return true),还要抢你的钱(url),你把钱塞裤裆里也给你掏出来(获取url方式比较淫秽呸隐晦)
    public boolean onCreateWindow(final WebView webView, boolean isDialog, boolean isUserGesture,
            Message resultMsg) {
        // 打开_blank创建新标签和点击链接都会触发 add by xiaohongmao 2016/11/15 下午2:41
        if(null != webView && !isDialog && isUserGesture && null != resultMsg && null != resultMsg.obj){
            WebView newWebView = new WebView(webView.getContext());
            newWebView.setWebViewClient(new WebViewClient() {
                @Override
                public boolean shouldOverrideUrlLoading(WebView view, String url) {
                    webView.loadUrl(url);
                    return true;
                }
            });
            WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj;
            transport.setWebView(newWebView);
            resultMsg.sendToTarget();
            return true;
        }
        return super.onCreateWindow(webView, isDialog, isUserGesture, resultMsg);
    }

分享这篇文章:

上一篇
OSChina绑定公钥—MAC
下一篇
Android资源文件混淆思路解析