Cliquer sur les URL ouvre le navigateur par défaut

J’ai chargé une URL externe dans mon WebView . Maintenant, ce dont j’ai besoin, c’est que lorsque l’utilisateur clique sur les liens de la page chargée, il doit fonctionner comme un navigateur normal et ouvrir le lien dans la même WebView . Mais il ouvre le navigateur par défaut et y charge la page?

J’ai activé JavaScript. Mais ça ne marche toujours pas. Ai-je oublié quelque chose?

Si vous utilisez un WebView vous devrez intercepter les clics vous-même si vous ne voulez pas le comportement Android par défaut.

Vous pouvez surveiller les événements dans une WebView aide d’un WebViewClient . La méthode que vous voulez est shouldOverrideUrlLoading() . Cela vous permet d’effectuer votre propre action lorsqu’une URL particulière est sélectionnée.

Vous définissez le WebViewClient de votre WebView à l’aide de la méthode setWebViewClient() .

Si vous regardez l’ exemple de WebView dans le SDK, il existe un exemple qui fait exactement ce que vous voulez. C’est aussi simple que:

 private class HelloWebViewClient extends WebViewClient { @Override public boolean shouldOverrideUrlLoading(WebView view, Ssortingng url) { view.loadUrl(url); return true; } } 

dans certains cas, vous pourriez avoir besoin d’un remplacement de onLoadResource si vous obtenez une redirection qui ne déclenche pas la méthode de chargement de l’URL. dans ce cas j’ai essayé ce qui suit:

 @Override public void onLoadResource(WebView view, Ssortingng url) { if (url.equals("http://redirectexample.com")) { //do your own thing here } else { super.onLoadResource(view, url); } } 

La documentation officielle dit, cliquez sur un lien dans un WebView lancera une application qui gère les URL. Vous devez remplacer ce comportement par défaut

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

ou s’il n’y a pas de logique conditionnelle dans la méthode simplement le faire

 myWebView.setWebViewClient(new WebViewClient()); 

Ajoutez ceci 2 lignes dans votre code –

 mWebView.setWebChromeClient(new WebChromeClient()); mWebView.setWebViewClient(new WebViewClient()); 

La réponse d’Arulx Z était exactement ce que je cherchais.

J’écris une application avec le tiroir de navigation avec recyclerview et webviews, pour garder la navigation Web dans l’application indépendamment des hyperliens cliqués (ne lançant pas le navigateur Web externe). Pour cela il suffira de mettre les 2 lignes de code suivantes:

mWebView.setWebChromeClient(new WebChromeClient()); mWebView.setWebViewClient(new WebViewClient());

exactement sous votre déclaration WebView.

Voici un exemple de mon code WebView implémenté:

 public class WebView1 extends AppCompatActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); WebView wv = (WebView) findViewById(R.id.wv1); //webview statement wv.setWebViewClient(new WebViewClient()); //the lines of code added wv.setWebChromeClient(new WebChromeClient()); //same as above wv.loadUrl("http://www.google.com"); }} 

De cette façon, chaque lien cliqué sur le site Web sera chargé dans votre WebView. (Utilisation d’Android Studio 1.2.2 avec tous les SDK mis à jour)

La méthode boolean shouldOverrideUrlLoading(WebView view, Ssortingng url) est déconseillée dans l’API 24. Si vous prenez en charge de nouveaux périphériques, vous devez utiliser boolean shouldOverrideUrlLoading (WebView view, WebResourceRequest request) .

Vous pouvez utiliser les deux en faisant quelque chose comme ceci:

 if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { newsItem.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { view.loadUrl(request.getUrl().toSsortingng()); return true; } }); } else { newsItem.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, Ssortingng url) { view.loadUrl(url); return true; } }); }