web-dev-qa-db-fra.com

Android WebView, comment gérer les redirections dans une application au lieu d'ouvrir un navigateur

Donc maintenant, dans mon application, l'URL à laquelle j'accède a une redirection, et lorsque cela se produit, WebView ouvrira un nouveau navigateur au lieu de rester dans mon application. Existe-t-il un moyen de modifier les paramètres pour que la vue redirige normalement vers l'URL, tout en restant dans mon application au lieu d'ouvrir un nouveau navigateur?

Modifier:

Je veux l'URL de redirection, je ne sais tout simplement pas comment la créer. Le seul moyen d'obtenir cette URL est donc de créer une redirection vers celle que je souhaite.

Par exemple: Quand vous allez ici: http://www.Amazon.com/gp/aw/s/ref=is_box_/k=9780735622777 notez comment il redirigera l'URL vers le produit réel. Dans mon application, si je l'ouvre dans un nouveau navigateur, tout se passera bien, mais si je la conserve dans mon application avec une vue Web, elle apparaîtra comme si elle effectuait une recherche de k = 9780735622777, comme ceci: http://www.Amazon.com/gp/aw/s/ref=is_s_?k=k%3D9780735622777&x=0&y= . OU, cela ouvrira la vue dans le navigateur et montrera ce qui est approprié. Cependant, je veux tout garder dans mon application.

105
James

Créez un WebViewClient et substituez la méthode 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
   }
});
232
xandy

Selon la version officielle documentation , un clic sur un lien de WebView lance une application qui gère les URL, qui est par défaut un navigateur. Vous devez remplacer le comportement par défaut comme ceci

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

Il suffit d’ajouter une valeur personnalisée par défaut WebViewClient. Cela fait que la vue Web gère les URL chargées elles-mêmes.

mWebView.setWebViewClient(new WebViewClient());
13
Till

Vous devrez définir votre méthode de redirection WebOverrideUrlLoading WebviewClient personnalisée pour votre affichage Web avant de charger l'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.
            }
        });

Consultez l'exemple de code permettant de gérer les URL de redirection et ouvrez PDF sans téléchargement, dans la vue Web. https://Gist.github.com/ashishdas09/014a408f9f37504eb2608d98abf495 =

7
Ashish Das

Créez une classe qui implémente webviewclient et ajoutez le code suivant permettant de survoler la chaîne d'URL comme indiqué ci-dessous. Vous pouvez les voir exemple

public class myWebClient extends WebViewClient {

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

Sur votre constructeur, créez un objet WebView comme indiqué ci-dessous.

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

Ajoutez ensuite le code suivant pour charger les URL dans votre application.

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

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

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

Télécharger la démo

2
Daniel Nyamasyo

Veuillez utiliser le code kotlin ci-dessous

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

Pour plus d'informations cliquez ici

0
Shalu T D