Android WebView, как обрабатывать перенаправления в приложении вместо открытия браузера - PullRequest
104 голосов
/ 01 ноября 2010

Так что прямо сейчас в моем приложении URL-адрес, к которому я обращаюсь, имеет перенаправление, и когда это происходит, WebView откроет новый браузер, а не останется в моем приложении. Есть ли способ изменить настройки так, чтобы представление перенаправлялось на URL-адрес как обычно, но оставалось в моем приложении вместо открытия нового браузера?

Edit:

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

Например: при переходе сюда: http://www.amazon.com/gp/aw/s/ref=is_box_/k=9780735622777 обратите внимание, как он будет перенаправлять URL на фактический продукт. В моем приложении, если я открою его в новом браузере, это будет хорошо, но если я сохраню его в своем приложении с WebView, оно будет выглядеть так, как будто оно выполняет поиск для k = 9780735622777, например так: http://www.amazon.com/gp/aw/s/ref=is_s_?k=k%3D9780735622777&x=0&y=0. ИЛИ откроет вид в браузере и покажет, что подходит. Однако я хочу сохранить все в своем приложении.

Ответы [ 6 ]

229 голосов
/ 01 ноября 2010

Создайте WebViewClient и переопределите метод shouldOverrideUrlLoading .

webview.setWebViewClient(new WebViewClient() {
    public boolean shouldOverrideUrlLoading(WebView view, String url){
        // do your handling codes here, which url is the requested url
        // probably you need to open that url rather than redirect:
        view.loadUrl(url);
        return false; // then it is not handled by default action
   }
});
17 голосов
/ 20 сентября 2013

Согласно официальной документации , при щелчке по любой ссылке в WebView запускается приложение, которое обрабатывает URL-адреса, которое по умолчанию является браузером.Вам нужно переопределить поведение по умолчанию, как это

    myWebView.setWebViewClient(new WebViewClient() {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            return false;
        }
    });
12 голосов
/ 25 ноября 2015

Просто добавьте пользовательскую настройку по умолчанию WebViewClient.Это заставляет WebView самостоятельно обрабатывать любые загруженные URL.

mWebView.setWebViewClient(new WebViewClient());
7 голосов
/ 24 февраля 2017

Вам нужно установить свой собственный метод переопределения WebviewClient shouldOverrideUrlLoading для вашего веб-просмотра перед загрузкой URL.

mWebView.setWebViewClient(new WebViewClient()
        {
            @SuppressWarnings("deprecation")
            @Override
            public boolean shouldOverrideUrlLoading(WebView webView, String url)
            {
                return shouldOverrideUrlLoading(url);
            }

            @TargetApi(Build.VERSION_CODES.N)
            @Override
            public boolean shouldOverrideUrlLoading(WebView webView, WebResourceRequest request)
            {
                Uri uri = request.getUrl();
                return shouldOverrideUrlLoading(uri.toString());
            }

            private boolean shouldOverrideUrlLoading(final String url)
            {
                Log.i(TAG, "shouldOverrideUrlLoading() URL : " + url);

                // Here put your code

                return true; // Returning True means that application wants to leave the current WebView and handle the url itself, otherwise return false.
            }
        });

Извлечь пример кода для обработки URL-адресов перенаправления и открытьPDF без скачивания, в webview.https://gist.github.com/ashishdas09/014a408f9f37504eb2608d98abf49500

2 голосов
/ 15 июля 2016

Создайте класс, который реализует webviewclient, и добавьте следующий код, который позволяет изменять строку URL, как показано ниже.Вы можете увидеть эти пример

public class myWebClient extends WebViewClient {

    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
         view.loadUrl(url); 
         return true;
     }
}

В конструкторе создайте объект веб-просмотра, как показано ниже.

   web = new WebView(this); web.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.FILL_PARENT)); 

Затем добавьтеследующий код для загрузки URL-адресов внутри вашего приложения

       WebSettings settings=web.getSettings(); 
    settings.setJavaScriptEnabled(true); 

    web.loadUrl("http://www.facebook.com");
    web.setWebViewClient(new myWebClient()); 

 web.setWebChromeClient(new WebChromeClient() {
      // 
      //
    }

Загрузить демонстрацию

0 голосов
/ 09 мая 2019

Пожалуйста, используйте приведенный ниже код котлина

webview.setWebViewClient(object : WebViewClient() {
            override fun shouldOverrideUrlLoading(view: WebView, url: String): Boolean {   
                view.loadUrl(url)
                return false 
            }
        })

Для получения дополнительной информации нажмите здесь

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