Question

Quelle est la différence entre setWebViewClient vs setWebChromeClient dans Android?

Était-ce utile?

La solution

De code source :

// Instance of WebViewClient that is the client callback.
private volatile WebViewClient mWebViewClient;
// Instance of WebChromeClient for handling all chrome functions.
private volatile WebChromeClient mWebChromeClient;

// SOME OTHER SUTFFF.......

/**
 * Set the WebViewClient.
 * @param client An implementation of WebViewClient.
 */
public void setWebViewClient(WebViewClient client) {
    mWebViewClient = client;
}

/**
 * Set the WebChromeClient.
 * @param client An implementation of WebChromeClient.
 */
public void setWebChromeClient(WebChromeClient client) {
    mWebChromeClient = client;
}

Utilisation WebChromeClient vous permet de gérer les boîtes de dialogue Javascript, favicons, les titres et les progrès. Jetez un oeil de cet exemple: Ajout du support d'alerte () à un WebView

À première vue, il y a trop de différences WebViewClient et < a href = "http://developer.android.com/reference/android/webkit/WebChromeClient.html" rel = "noreferrer"> WebChromeClient . Mais, au fond: si vous développez une WebView qui ne nécessite pas trop de fonctionnalités, mais le rendu HTML, vous pouvez simplement utiliser un WebViewClient. D'autre part, si vous voulez (par exemple) charger le favicon de la page que vous êtes rendu, vous devez utiliser un objet WebChromeClient et remplacer le onReceivedIcon(WebView view, Bitmap icon).

La plupart du temps, si vous ne voulez pas vous soucier de ces choses ... vous pouvez simplement faire ceci:

webView= (WebView) findViewById(R.id.webview); 
webView.setWebChromeClient(new WebChromeClient()); 
webView.setWebViewClient(new WebViewClient()); 
webView.getSettings().setJavaScriptEnabled(true); 
webView.loadUrl(url); 

Et votre WebView sera (en théorie) ont toutes les fonctionnalités mises en œuvre (comme le navigateur natif Android).

Autres conseils

Je me sens ce un besoin de question peu plus de détails. Ma réponse est inspirée de la programmation Android, The Nerd Ranch Guide (2ème édition).

Par défaut , JavaScript est désactivé dans WebView. Vous ne faut pas toujours avoir, mais pour certaines applications, peut-être ne l'exigent.

Charger l'URL doit être fait après avoir configuré la WebView, de sorte que vous faites cette dernière. Avant cela, vous activez JavaScript en appelant getSettings() pour obtenir une instance de WebSettings et d'appeler WebSettings.setJavaScriptEnabled(true). WebSettings est la première des trois façons dont vous pouvez modifier votre WebView. Il a plusieurs propriétés que vous pouvez définir, comme la chaîne de l'agent utilisateur et la taille du texte.

Après cela, vous configurez votre WebViewClient. WebViewClient est une interface d'événement. En fournissant votre propre implémentation de WebViewClient, vous pouvez répondre à des événements de rendu. Par exemple, vous pouvez détecter le moment où le moteur de rendu commence à charger une image à partir d'une URL particulière ou décider de soumettre à nouveau une demande POST au serveur.

WebViewClient a de nombreuses méthodes que vous pouvez remplacer, dont la plupart vous ne traiterai pas. Cependant, vous avez besoin de remplacer la mise en œuvre de shouldOverrideUrlLoading(WebView, String) de la valeur par défaut WebViewClient. Cette méthode détermine ce qui va se passer quand une nouvelle URL est chargée dans le WebView, comme en appuyant sur un lien. Si vous retournez vrai, vous dites: « Ne pas manipuler cette URL, je traitais moi-même. » Si vous revenez faux, vous dites: « Allez-y et charger cette URL, WebView, je ne fais rien avec elle « .

La mise en œuvre par défaut déclenche une intention implicite avec l'URL, comme vous l'avez fait auparavant. Maintenant, cependant, ce serait un grave problème. La première chose que certaines applications Web ne vous est rediriger vers la version mobile du site. Avec le WebViewClient par défaut, cela signifie que vous sont immédiatement envoyés au navigateur Web par défaut de l'utilisateur. Ceci est juste ce que vous essayez d'éviter. La solution est simple - il suffit de remplacer l'implémentation par défaut et return false.

Utilisez WebChromeClient pour embellir les choses Puisque vous prenez le temps de créer votre propre WebView, nous allons, il embellir un peu en ajoutant une barre de progression et mettre à jour le sous-titre de la barre d'outils avec le titre de la page chargée.

Pour brancher la barre de progression, vous utiliserez la deuxième rappel sur WebView. WebChromeClient

WebViewClient est une interface pour répondre à des événements de rendu; WebChromeClient est une interface d'événement pour réagir aux événements qui devraient changer les éléments de chrome dans le navigateur. Cela inclut des alertes JavaScript, favicons, et des mises à jour de cours pour la progression du chargement et le titre de la page en cours.

le brancher à onCreateView(…). L'utilisation WebChromeClient aux choses de l'épinette mises à jour et mises à jour des progrès de titre ont chacun leur propre méthode de rappel, onProgressChanged(WebView, int) et onReceivedTitle(WebView, String). Les progrès que vous recevez de onProgressChanged(WebView, int) est un entier de 0 à 100. S'il est 100, vous savez que la page se fait le chargement, de sorte que vous cachez la barre de progression en définissant sa visibilité à View.GONE.

  

Disclaimer: Cette information provient d'Android Programmation: The Big Nerd Ranch Guide avec l'autorisation des auteurs. Pour plus   informations sur ce livre ou d'acheter une copie, s'il vous plaît visitez   bignerdranch.com.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top