En cliquant URL ouvre le navigateur par défaut
-
24-09-2019 - |
Question
Je l'ai chargé une URL externe dans mon WebView
. Maintenant, ce que j'ai besoin est que lorsque l'utilisateur clique sur les liens sur la page chargée, il doit travailler comme un navigateur normal et ouvrir le lien dans la même WebView
. Mais il est d'ouvrir le navigateur par défaut et chargement de la page il?
J'ai activé JavaScript. Mais encore il ne fonctionne pas. Ai-je oublié quelque chose?
La solution
Si vous utilisez un WebView
vous devrez intercepter les clics vous-même si vous ne voulez pas le comportement par défaut Android.
Vous pouvez suivre les événements dans un WebView
en utilisant un WebViewClient
. La méthode que vous voulez est de WebView
dans le SDK il y a un exemple qui Est-ce que tout ce que vous voulez. Il est aussi simple que:
private class HelloWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
}
Autres conseils
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 url. dans ce cas, j'ai essayé les éléments suivants:
@Override
public void onLoadResource(WebView view, String url)
{
if (url.equals("http://redirectexample.com"))
{
//do your own thing here
}
else
{
super.onLoadResource(view, url);
}
}
dit, cliquez sur un lien dans une WebView sera demande de lancement qui gère les URL. Vous devez remplacer ce comportement par défaut
myWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
return false;
}
});
ou s'il n'y a pas de logique conditionnelle dans la méthode simplement faire
myWebView.setWebViewClient(new WebViewClient());
Ajoutez cette 2 lignes dans votre code -
mWebView.setWebChromeClient(new WebChromeClient());
mWebView.setWebViewClient(new WebViewClient());
La méthode boolean shouldOverrideUrlLoading(WebView view, String url)
a été désapprouvée dans l'API 24. Si vous soutenez 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().toString());
return true;
}
});
} else {
newsItem.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
});
}
Arulx la réponse Z était exactement ce que je cherchais.
J'écris une application avec tiroir avec navigation recyclerview et webviews, pour maintenir la navigation sur le Web à l'intérieur de l'application indépendamment des hyperliens clicked (donc pas de lancer le navigateur Web externe). Pour cela, il suffit 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 mis en œuvre WebView:
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 se charge dans votre WebView. (Android Studio 1.2.2 avec tous les SDK mis à jour)