webview открыть цель _blank в новой вкладке фрагмента - PullRequest
1 голос
/ 28 апреля 2020

Я пытаюсь открыть целевой _blank из onCreateWindow WebChromeClient из этого поста

Android - Открыть целевые _blank ссылки в WebView с помощью внешнего браузера

, но данные возвращаются null.

пример сайта getintop c .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

создает новое веб-представление с URL цели _blank. но проблема в том, что я не могу получить URL. Мне нужен только URL, так как я открываю его с одним и тем же веб-обзором вкладок с разными фрагментами.

пример, который я тестировал getintop c .com

1 Ответ

1 голос
/ 30 апреля 2020

Наконец, несколько советов в нижней части этого вопроса

Android - Открывать целевые _blank ссылки в WebView с помощью внешнего браузера

          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;
        }

, но когда я нажимаю кнопку загрузки в getintop c .com, в отличие от других браузеров, он будет ждать несколько секунд и создаст новую вкладку и даст мне файл для немедленной загрузки вместо того, чтобы перейти к обработке загрузки и ждать несколько секунд.

для другого сайта с целевой _blank отлично работает!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...