首页 > 解决方案 > webview在新片段选项卡中打开目标_blank

问题描述

我尝试从这篇文章中从 WebChromeClient 的 onCreateWindow 打开目标 _blank

Android - 使用外部浏览器在 WebView 中打开目标 _blank 链接

但数据返回空值。

示例网站 getintopc.com

    @Override
        public boolean onCreateWindow(WebView view, boolean dialog, boolean userGesture, Message resultMsg)
        {
            WebView.HitTestResult result = view.getHitTestResult();
            String data = result.getExtra();

            models.add(models.size() - 1, new WebpageModel(DEFAULT_TITLE,
                    data));
            navDrawerAdapter.notifyDataSetChanged();


            fragments.add(WebpageFragment.newInstance(fragments.size(),
                    models.get(models.size() - 2).getUrl()));
            getActivity().getSupportFragmentManager().beginTransaction()
                    .hide(fragments.get(current_position))
                    .add(R.id.container, fragments.get(fragments.size() - 1))
                    .commit();
            current_position = fragments.size() - 1;


            return false;
        }

伙计们,我发现这个项目有效。

http://therockncoder.blogspot.com/2014/04/understanding-androids-webchromeclient.html?m=1

它使用目标 _blank 的 url 创建新的 webview。但问题是我无法获取网址。我只想要 url,因为我用不同片段选项卡的相同 webview 打开它。

例如我测试了 getintopc.com

标签: javaandroid

解决方案


最后来自这个问题底部的一些提示

Android - 使用外部浏览器在 WebView 中打开目标 _blank 链接

          mWebView.getSettings().
setSupportMultipleWindows(true);
        @Override
        public boolean onCreateWindow(WebView 
view, boolean dialog, boolean userGesture, Message 
resultMsg)
        {

            WebView newView = new 
WebView(getActivity());
            WebSettings settings = 
newView.getSettings();
            settings.setJavaScriptEnabled(true);

settings.
setJavaScriptCanOpenWindowsAutomatically(true);
            settings.
setSupportMultipleWindows(true);
            settings.setUseWideViewPort(false);
            newView.setWebViewClient(new 
WebViewClient() {
                @Override
                public boolean 
shouldOverrideUrlLoading(WebView view, String urls) {
                    models.add(models.size() - 1, 
new WebpageModel(DEFAULT_TITLE,
                            urls));

navDrawerAdapter.notifyDataSetChanged();



 fragments.
 add(WebpageFragment.newInstance(fragments.size(),

 models.get(models.size() - 2).getUrl()));

 getActivity().
 getSupportFragmentManager().beginTransaction()

.hide(fragments.get(current_position))
                            .add(R.id.container, 
 fragments.get(fragments.size() - 1))
                            .commit();
                    current_position = 
fragments.size() - 1;


                    return true;
                }


            });

            WebView.WebViewTransport transport = 
 (WebView.WebViewTransport) resultMsg.obj;
            transport.setWebView(newView);
            resultMsg.sendToTarget();



            return true;
        }

但是当我在 getintopc.com 中按下下载按钮时,与其他浏览器不同,它会等待几秒钟并创建新标签并给我要立即下载的文件,而不是去处理下载并等待几秒钟的页面。

对于具有目标 _blank 的其他站点工作正常!


推荐阅读