Je construis un WebView
qui affiche un site Web. Le site Web contient des liens sans target="_blank"
attribut et certains avec.
J'ai besoin d'ouvrir les liens avec target
définis dans le navigateur de périphérique standard externe et ceux sans celui-ci dans WebView.
J'utilise un WebViewClient
et j'ai essayé avec cette fonction mais tous mes liens sont toujours ouverts dans le WebView
:
Alternative 1:
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
return super.shouldOverrideUrlLoading(view, url);
}
Alternative 2:
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
Quelqu'un sait-il comment ouvrir des liens vides en externe?
Merci!
PS: Pour éviter les malentendus: je ne peux pas utiliser cette approche parce que la seule façon dont je sais que le lien doit être ouvert en externe est l'attribut target
.
Après avoir visité les liens ci-dessus, je trouve ce code et j'espère que cela vous aidera.
wv.getSettings().setSupportMultipleWindows(true);
wv.setWebChromeClient(new WebChromeClient() {
@Override
public boolean onCreateWindow(WebView view, boolean dialog, boolean userGesture, Android.os.Message resultMsg)
{
WebView.HitTestResult result = view.getHitTestResult();
String data = result.getExtra();
Context context = view.getContext();
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(data));
context.startActivity(browserIntent);
return false;
}
});
J'ai rencontré le même problème. Je voulais ouvrir les pages de mes sites Web dans l'application et reposer toutes les pages devraient être ouvertes dans le navigateur par défaut. J'ai utilisé une technique. Si l'URL contient le nom de mon site Web, je l'ai ouvert dans WebView et reposé tous les sites Web ouverts dans le navigateur par défaut.
Trouvez ci-dessous le code, j'espère qu'il serait utile pour tous ceux qui ont rencontré de tels problèmes.
private class MyBrowser extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url.contains("/internetgeeks")) {
browser.loadUrl(url);
return false;
} else {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(url));
startActivity(intent);
return true;
}
}
}
J'ai aussi le même problème et maintenant j'ai trouvé la solution.
Vous devez également utiliser WebChromeClient. Vous pouvez voir this et this . Et vous pouvez définir un WebViewClient sur le nouveau WebView et remplacer la méthode shouldOverrideUrlLoading, puis vous pouvez obtenir l'URL et faire ce que vous voulez ici. Si vous ne définissez pas le WebViewClient, je pense que cela devrait aussi fonctionner. Dans mon cas, je veux obtenir l'URL, j'ai donc défini un WebViewClient sur le nouveau WebView.
Soit dit en passant, si vous supprimez l'ancienne vue Web, puis lorsque vous revenez du navigateur, la vue Web est vide. J'ai donc conservé la vue Web et j'en ai ajouté une nouvelle, mais j'ai défini la visibilité sur "disparu".