【问题标题】:webview open target _blank in new fragment tabwebview在新片段选项卡中打开目标_blank
【发布时间】:2020-04-28 16:29:24
【问题描述】:

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

Android - Open target _blank links in WebView with external browser

但数据返回 null。

示例网站 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 的示例

【问题讨论】:

    标签: java android


    【解决方案1】:

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

    Android - Open target _blank links in WebView with external browser

              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 的其他网站工作正常!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-12
      • 1970-01-01
      • 1970-01-01
      • 2017-01-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多