Propriété de Albiri Sigue
customer 27921 at Fri Mar 11 19:19:45 +0100 2011
Chapitre 13
Intégrer le navigateur de WebKit 151
Navigation au long cours
Comme on l’a déjà mentionné, le widget WebView ne comprend pas de barre de navigation, ce qui permet de l’utiliser à des endroits où cette barre serait inutile et consommerait
inutilement de l’espace à l’écran. Ceci étant dit, il est tout à fait possible de lui ajouter des
fonctionnalités de navigation, à condition de fournir l’interface graphique nécessaire.
WebView dispose notamment des méthodes suivantes :
● reload() permet de recharger la page courante.
● goBack() permet de revenir un pas en arrière dans l’historique du navigateur, tandis
que canGoBack() teste s’il existe un historique passé.
● goForward() permet d’avancer d’un pas dans l’historique du navigateur, tandis que
canGoForward() teste s’il existe un historique futur.
● goBackOrForward() permet de reculer ou d’avancer dans l’historique en fonction de
son paramètre. Une valeur négative représente le nombre de pas vers l’arrière, une
valeur positive, le nombre de pas vers l’avant.
● canGoBackOrForward() teste si le navigateur peut reculer ou avancer du nombre de
pas indiqué dans l’historique (en suivant la même convention positif/négatif que pour
goBackOrForward()).
● clearCache() vide le cache du navigateur et clearHistory() nettoie son historique.
Amuser le client
Si vous utilisez un widget WebView pour créer une interface utilisateur locale (et non pour
naviguer sur le Web), vous aurez besoin de le contrôler à certains moments, notamment
lorsque les utilisateurs cliqueront sur des liens. Vous devrez vous assurer que ces liens sont
correctement gérés, soit en rechargeant votre propre contenu dans le WebView (en soumettant un Intent à Android pour qu’il ouvre l’URL dans un vrai navigateur), soit par
d’autres moyens (voir Chapitre 25).
La méthode setWebViewClient(), qui prend en paramètre une instance d’une implémentation de WebViewClient, permet de placer un hook dans l’activité WebView. L’objet
fourni sera alors prévenu d’un grand nombre d’activités, allant de la récupération d’une
partie d’une page (onPageStarted(), etc.) à la nécessité pour l’application de prendre en
compte un événement utilisateur ou circonstanciel (onTooManyRedirects(), onReceivedHttpAuthRequest(), etc.).
Un hook classique est shouldOverrideUrlLoading(), qui prend en paramètre une URL
et l’objet WebView lui-même et qui doit renvoyer true si vous traitez la requête ou false
si vous préférez utiliser le traitement par défaut (qui consiste à récupérer la page web désignée par l’URL). Pour une application de lecture de flux RSS, par exemple, le lecteur ne
Livre Android.book Page 151 Dimanche, 8. novembre 2009 12:23 12
customer 27921 at Fri Mar 11 19:19:45 +0100 2011
Chapitre 13
Intégrer le navigateur de WebKit 151
Navigation au long cours
Comme on l’a déjà mentionné, le widget WebView ne comprend pas de barre de navigation, ce qui permet de l’utiliser à des endroits où cette barre serait inutile et consommerait
inutilement de l’espace à l’écran. Ceci étant dit, il est tout à fait possible de lui ajouter des
fonctionnalités de navigation, à condition de fournir l’interface graphique nécessaire.
WebView dispose notamment des méthodes suivantes :
● reload() permet de recharger la page courante.
● goBack() permet de revenir un pas en arrière dans l’historique du navigateur, tandis
que canGoBack() teste s’il existe un historique passé.
● goForward() permet d’avancer d’un pas dans l’historique du navigateur, tandis que
canGoForward() teste s’il existe un historique futur.
● goBackOrForward() permet de reculer ou d’avancer dans l’historique en fonction de
son paramètre. Une valeur négative représente le nombre de pas vers l’arrière, une
valeur positive, le nombre de pas vers l’avant.
● canGoBackOrForward() teste si le navigateur peut reculer ou avancer du nombre de
pas indiqué dans l’historique (en suivant la même convention positif/négatif que pour
goBackOrForward()).
● clearCache() vide le cache du navigateur et clearHistory() nettoie son historique.
Amuser le client
Si vous utilisez un widget WebView pour créer une interface utilisateur locale (et non pour
naviguer sur le Web), vous aurez besoin de le contrôler à certains moments, notamment
lorsque les utilisateurs cliqueront sur des liens. Vous devrez vous assurer que ces liens sont
correctement gérés, soit en rechargeant votre propre contenu dans le WebView (en soumettant un Intent à Android pour qu’il ouvre l’URL dans un vrai navigateur), soit par
d’autres moyens (voir Chapitre 25).
La méthode setWebViewClient(), qui prend en paramètre une instance d’une implémentation de WebViewClient, permet de placer un hook dans l’activité WebView. L’objet
fourni sera alors prévenu d’un grand nombre d’activités, allant de la récupération d’une
partie d’une page (onPageStarted(), etc.) à la nécessité pour l’application de prendre en
compte un événement utilisateur ou circonstanciel (onTooManyRedirects(), onReceivedHttpAuthRequest(), etc.).
Un hook classique est shouldOverrideUrlLoading(), qui prend en paramètre une URL
et l’objet WebView lui-même et qui doit renvoyer true si vous traitez la requête ou false
si vous préférez utiliser le traitement par défaut (qui consiste à récupérer la page web désignée par l’URL). Pour une application de lecture de flux RSS, par exemple, le lecteur ne
Livre Android.book Page 151 Dimanche, 8. novembre 2009 12:23 12
