Comment programmer un Navigateur Internet avec Qt 4 et QtWebKit

Benjamin Meyer

Cet article explique comment il est possible de créer efficacement et rapidement un navigateur avec Qt 4.4 et le QtWebKit.

- Titre : Comment programmer un Navigateur Internet avec Qt 4 et QtWebKit

- Auteur : Benjamin Meyer

- Parution : 12 mai 2008

- Licence : Copyright ® 2008 Benjamin Meyer. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- I. Introduction

- II. Vitesse de démarrage

- III. Gestion du réseau

- IV. Agent utilisateur

- V. Gestion de session

- VI. X-Qt-Plugin

- VII. Plus qu'un navigateur

- VIII. Conclusion

I - Introduction

Dans sa version 4.4, Qt a reçu un nouveau module, j'en ai suivi le développement au cours de l'année dernière tout en étant impatient de m'amuser avec en utilisant Qt. Peu après, le module a été intégré à la branche principale de Qt et j'ai commencé à travailler sur un petit navigateur pendant mon temps libre. Un outil que je pourrais utiliser pour naviguer un peu au quotidien. En me servant directement de ce que j'ai créé, j'ai pu détecter des erreurs dans WebKit, le nouveau code de mise en réseau, et repérer des zones posant problème, en particulier dans l'interface de programmation avant le lancement sur le marché.

*Avis de non-responsabilité : Ce n'est qu'un petit projet de démonstration personnel, en aucun cas une substitution à FireFox.*

II - Vitesse de démarrage

L'une des particularités appréciables de Qt4 par rapport à Qt3 est sa vitesse de démarrage. J'ai même lu des commentaires de KDE4 qui mentionnent le petit bond en avant reçu par les applications KDE, qui l'ont bien supporté sans nécessiter de réusinage.

Lorsque l'un de mes collègues a commencé à travailler sur l'outil d'intégration WebKit/Qt, j'ai remarqué que son application test se lançait presque instantanément quand Qt était déjà en mémoire. Donc, si WebKit peut se lancer rapidement et que Qt le peut également, j'allais à coup sûr faire en sorte qu'aucun code de démonstration idiot ne le ralentisse au lancement. Ainsi, même avec une base de données d'icônes, un historique, des cookies, des onglets, etc. la démonstration se lance tout de même rapidement. Je pense donc que la démonstration est assez rapide.

III - Gestion du réseau

La version 4.4 comprend de nouvelles classes de gestion de réseau élaborées autour de la nouvelle classe QNetworkAccessManager. J'ai créé, au-dessus de ces classes de gestion de réseau, des composants interface utilisateur graphique comprenant un gestionnaire de téléchargement minimal avec les outils habituels que sont une barre de progression, la vitesse de téléchargement, etc. Une belle petite démo pour le gestionnaire de téléchargement en bonne et due forme. L'une des nouveautés utilisées par QNetworkAccessManager que j'ai oublié de mentionner est QCookieJar qui est inclus dans Qt4. En le créant, j'ai ajouté, sauvegarder/charger, et les fonctionnalités habituelles d'un navigateur Internet.

IV - Agent utilisateur

Une fois le navigateur suffisamment préparé pour être utilisé quotidiennement, j'ai réglé Gnome et KDE pour qu'ils choisissent le navigateur de démonstration comme navigateur favori. Donc, dès que je clique sur un lien contenu dans un courrier électronique ou en provenance de #qt sur irc, le navigateur de démonstration est utilisé et un nouvel agent utilisateur apparaît dans les journaux de serveur pour le mystérieux demobrowser/0.1. L'agent utilisateur qtwebkit par défaut est élaboré à partir de QCoreApplication::applicationName et des nouvelles propriétés QCoreApplication::applicationVersion. Donc, si vous intégrez QtWebKit dans votre application, il inclura automatiquement le nom et la version de l'application dans l'agent utilisateur. Il est possible de configurer cette option.

Puisqu'il ne s'agit que d'une démonstration, et par souci de simplicité, la démo se comporte comme une application simple, lorsqu'elle et lancée, elle contacte le navigateur en cours d'exécution et lui demande d'ouvrir l'URL des arguments de ligne de commande s'il y en a (il est bien entendu possible de le configurer pour qu'une nouvelle fenêtre ou un nouvel onglet s'ouvre).

V - Gestion de session

En développant la démonstration, je savais que je devrais laisser mon navigateur ouvert pendant des jours et la perte des onglets ouverts (ou tout en fait) dans un plantage n'est jamais agréable. J'ai donc voulu, lors du développement de la démonstration, redémarrer celle-ci rapidement à mesure que j'y apportais des modifications. Avec ceci en tête, la démo contient un petit outil de surveillance qui s'assure que l'on ne perd au maximum que les trois dernières secondes en cas de plantage. Ce ne sont pas seulement les onglets, mais aussi les cookies et tout le reste qui sont protégés. Au redémarrage du navigateur, en sélectionnant Historique/Restaurer la dernière session, toutes les fenêtres et onglets de premier niveau de la dernière session se rouvriront très vite.

VI - X-Qt-Plugin

QtWebKit comprend un cadre de plug-in et QWebPage comporte une structure supplémentaire en support pour un type de plug-in spécifique, x-qt-plugin que le demobrowser exécute

Le navigateur de démonstration vous permet d'ajouter un gadget logiciel Qt sur la page Web. Comme avec QScript, les signaux, fentes, propriétés sont tous entièrement accessibles depuis JavaScript.

L'on pourrait même intégrer QWebView et un navigateur dans le navigateur si on le voulait. Si vous chargez une page Web avec le navigateur de démonstration avec le code suivant, vous trouverez une QProgressbar de chargement.

<object type="application/x-qt-plugin" classid="QProgressBar"
name="progressbar" height=30></object>
<script>
function display(){
if (++document.progressbar.value != 100)
setTimeout("display()", 50)
}
display();
</script>

VII - Plus qu'un navigateur

Certains développeurs ont déjà rédigé des blogs sur leurs projets QtWebKit intéressants comme Amarok et KDE Plasmoids. Je suis impatient de voir ce qui se fait avec QtWebKit.

VIII - Conclusion

Vous pouvez trouver la démo dans le répertoire de démos/navigateur du progiciel Qt. Le navigateur de la version 4.4 snapshots est plus complet que la version bêta car il comprend la configuration du proxy, une page de recherche, des raccourcis clavier améliorés et certaines fonctionnalités citées ici.

- Ce n'est qu'une démo, j'ai essayé de faire quelque chose qui serait facile à faire avec Qt, je ne me suis donc pas servi de support bunzip, tar et bittorrent pour le gestionnaire de téléchargement. Il existe plein de choses à clarifier tout d'abord comme les signets.

- Bien que le support de plug-in ait été ajouté à QtWebKit pour la version 4.4, le support plug-in flash officiel d'Adobe devra attendre la version 4.5. Plus précisément, le support de plug-in Netscape ne sera pas ajouté avant la version 4.5.

- Gmail ne fonctionne pas actuellement.

- Aucun plantage n'a été rapporté, alors n'hésitez pas à les signaler si vous en rencontrez.

- J'ai prévu de continuer à développer cette démo. J'ai, par exemple, presque terminé les signets dans une branche et je travaille à l'ajout de tests automatiques supplémentaires avant de fusionner.

- De nombreux problèmes de cookies peuvent être contournés en activant "Accepter tous les cookies" dans les préférences, la réserve de cookies comporte des solutions n'ayant pas encore été ajoutées.

- N'hésitez pas à vérifier le code de la démo. La taille totale est relativement réduite et j'ai essayé de garder le code assez simple.

Voici enfin une petite capture d'écran du navigateur sur notre site français préféré !

qt.developpez.com