Quelle est la différence entre setWebViewClient
vs setWebChromeClient
et Android?
android
webviewclient
webchromeclient
Pentium10
la source
la source
Réponses:
Du code source :
L'utilisation de WebChromeClient vous permet de gérer les boîtes de dialogue Javascript, les favicons, les titres et la progression. Jetez un œil à cet exemple: Ajout de la prise en charge alert () à une WebView
À première vue, il existe trop de différences WebViewClient & WebChromeClient . Mais, fondamentalement: si vous développez une WebView qui ne nécessitera pas trop de fonctionnalités mais un rendu HTML, vous pouvez simplement utiliser a
WebViewClient
. D'un autre côté, si vous voulez (par exemple) charger le favicon de la page que vous rendez, vous devez utiliser unWebChromeClient
objet et remplacer leonReceivedIcon(WebView view, Bitmap icon)
.La plupart du temps, si vous ne voulez pas vous inquiéter de ces choses ... vous pouvez simplement faire ceci:
Et votre WebView aura (en théorie) toutes les fonctionnalités implémentées (comme le navigateur natif Android).
la source
Je pense que cette question a besoin d'un peu plus de détails. Ma réponse est inspirée de la programmation Android, The Nerd Ranch Guide (2nd edition).
Par défaut , JavaScript est désactivé dans WebView. Vous n'avez pas toujours besoin de l'avoir, mais pour certaines applications, cela peut être nécessaire.
Le chargement de l'URL doit être effectué après la configuration de WebView, vous devez donc le faire en dernier. Avant cela, vous activez JavaScript en appelant
getSettings()
pour obtenir une instance de WebSettings et en appelantWebSettings.setJavaScriptEnabled(true)
. WebSettings est la première des trois façons dont vous pouvez modifier votre WebView. Il a différentes 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 aux é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 propose de nombreuses méthodes que vous pouvez remplacer, dont la plupart ne seront pas traitées. Cependant, vous devez remplacer l'implémentation par défaut de WebViewClient de
shouldOverrideUrlLoading(WebView, String)
. Cette méthode détermine ce qui se passera lorsqu'une nouvelle URL est chargée dans la WebView, comme en appuyant sur un lien. Si vous retournez vrai, vous dites: «Ne gérez pas cette URL, je la gère moi-même.» Si vous retournez false, vous dites: "Allez-y et chargez cette URL, WebView, je ne fais rien avec."L'implémentation par défaut déclenche une intention implicite avec l'URL, comme vous l'avez fait précédemment. Maintenant, cependant, ce serait un problème grave. La première chose que certaines applications Web font est de vous rediriger vers la version mobile du site Web. Avec le WebViewClient par défaut, cela signifie que vous êtes immédiatement envoyé vers le navigateur Web par défaut de l'utilisateur. C'est exactement ce que vous essayez d'éviter. Le correctif est simple - remplacez simplement l'implémentation par défaut et retournez false.
Utilisez WebChromeClient pour embellir les choses Puisque vous prenez le temps de créer votre propre WebView, améliorons-le un peu en ajoutant une barre de progression et en mettant à 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 aux événements de rendu; WebChromeClient est une interface d'événement pour réagir aux événements qui devraient changer des éléments de chrome autour du navigateur. Cela inclut des alertes JavaScript, des favicons et bien sûr des mises à jour pour la progression du chargement et le titre de la page actuelle.
Accrochez-le
onCreateView(…)
. Utiliser WebChromeClient pour embellir les choses Les mises à jour de progression et les mises à jour de titre ont chacune leur propre méthode de rappel,onProgressChanged(WebView, int)
etonReceivedTitle(WebView, String)
. La progression que vous recevezonProgressChanged(WebView, int)
est un entier compris entre 0 et 100. S'il s'agit de 100, vous savez que le chargement de la page est terminé, vous masquez donc la barre de progression en définissant sa visibilité surView.GONE
.la source