2010-11-01 1 views
84

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

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. ИЛИ, он откроет представление в браузере и покажет, что подходит. Тем не менее, я хочу сохранить все в своем приложении.

ответ

206

Создайте 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 
    } 
}); 
+0

Как это работает, если я не знаю URL-адрес загрузки? – James

+0

прочитал отредактированный ответ. – xandy

+4

Хорошо работает, спасибо за это :) – craigp

12

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

myWebView.setWebViewClient(new WebViewClient() { 
     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 
      return false; 
     } 
    }); 
+4

Еще лучше просто вызвать myWebView.setWebViewClient (новый WebViewClient()); По умолчанию реализация shouldOverrideUrlLoading возвращает false. – cyroxis

6

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

mWebView.setWebViewClient(new WebViewClient()); 
1

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

public class myWebClient extends WebViewClient { 

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

На конструкторе создать объект WebView, как показано ниже.

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() { 
     // 
     // 
    } 

Download demo

4

Вы должны установить свой собственный WebviewClient перекрывая shouldOverrideUrlLoading метод для WebView перед загрузкой 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. 
      } 
     }); 

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

+0

Обратите внимание, что приведенная выше ссылка для примерного кода не существует. – Jetdog

+0

Я загрузил ссылку. –

 Смежные вопросы

  • Нет связанных вопросов^_^