Android WebView, comment gérer l'application de redirection dans au lieu d'ouvrir un navigateur
-
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.
La solution
Créer un WebViewClient, et remplacer le la méthode de 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
}
});
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() {
//
//
}