Android WebView, comment gérer l'application de redirection dans au lieu d'ouvrir un navigateur

StackOverflow https://stackoverflow.com/questions/4066438

  •  28-09-2019
  •  | 
  •  

Question

Alors maintenant dans mon application l'URL j'accéder a une redirection, et quand cela arrive, le WebView ouvrira un nouveau navigateur, au lieu de rester dans mon application. Est-il possible que je peux modifier les paramètres afin que la vue redirigera vers l'URL comme normale, mais rester dans mon application au lieu d'ouvrir un nouveau navigateur?

Edit:

Je veux l'URL de redirection, je ne sais pas comment créer, donc la seule façon d'arriver à cette URL est par celui qui provoque une redirection vers celui que je veux.

Par exemple: Quand vous allez ici: http: // préavis de www.amazon.com/gp/aw/s/ref=is_box_/k=9780735622777 comment il va rediriger l'URL vers le produit réel. Dans mon application, si je l'ouvre dans un nouveau navigateur, il le fera très bien, si je le garde dans mon application avec une WebView, il apparaîtra comme si ce fait une recherche pour k = 9780735622777, comme ceci: http://www.amazon.com / gp / aw / s / ref = is_s_? k = k% 3D9780735622777 & x = 0 & y = 0 . OU, il ouvre la vue dans le navigateur et montrer ce qui est approprié. Cependant, je veux tout garder dans mon application.

Autres conseils

Selon le responsable , un clic sur un lien WebView lance une application que les URL de poignées, qui par défaut est 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;
        }
    });

Il suffit d'ajouter un WebViewClient personnalisé par défaut fera. Cela rend la poignée de WebView tout se urls chargé.

mWebView.setWebViewClient(new WebViewClient());

Vous devez définir votre remplaçant WebviewClient personnalisé shouldOverrideUrlLoading méthode pour votre WebView 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.
            }
        });
  

Commander le code exemple pour le traitement des urls de redirection et PDF ouvert sans téléchargement, dans WebView.    https://gist.github.com/ashishdas09/014a408f9f37504eb2608d98abf49500

Créer une classe qui implémente webviewclient et ajoutez le code suivant qui permet ovveriding la chaîne URL comme indiqué ci-dessous. Vous pouvez voir ces 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)); 

Ensuite, ajoutez le code suivant pour effectuer le chargement de votre application à l'intérieur urls

       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

S'il vous plaît utiliser le Code ci-dessous Kotlin

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

Pour plus d'informations cliquez sur

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top