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