Comme toujours, il faut d'abord prendre le temps de
réfléchir à son programme avant de foncer le coder tête baissée. C'est ce qu'on appelle la phase de
conception.
Je sais, je me répète à chaque fois, mais c'est vraiment parce que c'est très important. Si je vous dis "
faites-moi un navigateur web" et que vous créez de suite un nouveau projet en vous demandant ce que vous allez bien pouvoir mettre dans le
main, ben... c'est le ramassage assuré.
Pour moi, la conception est l'étape la plus difficile du projet. Plus difficile même que le code. En effet, si vous concevez bien votre programme, si vous réfléchissez bien à la façon dont il doit fonctionner, vous aurez simplifié à l'avance votre projet et vous n'aurez pas à écrire des lignes de code difficiles inutilement.
Dans un premier temps, je vais vous expliquer comment fonctionne un navigateur web. Un peu de culture générale à ce sujet vous permettra de mieux comprendre ce que vous avez à faire (et ce que vous n'avez pas à faire).
Je vous donnerai ensuite quelques conseils pour organiser votre code : quelles classes créer, par quoi commencer, etc.
Les principaux navigateurs
Commençons par le commencement : vous savez ce qu'est un navigateur web ?
Bon, je ne me moque pas de vous, mais il vaut mieux être sûr de ne perdre personne.
Un navigateur web est un programme qui permet de consulter des sites web.
Parmi les plus connus d'entre eux, citons Internet Explorer, Mozilla Firefox ou encore Safari. Mais il y en a aussi beaucoup d'autres, certes moins utilisés, comme Opera, Konqueror, Epiphany, Maxthon, Lynx...
Je vous rassure, il n'est pas nécessaire de tous les connaître pour pouvoir prétendre en créer un.
Par contre, ce qu'il faut que vous sachiez, c'est que chacun de ces navigateurs est constitué de ce qu'on appelle un
moteur web. Qu'est-ce que c'est que cette bête-là ?
Le moteur web
Tous les sites web sont écrits en langage HTML (ou XHTML). Voici un exemple de code HTML permettant de créer une page très simple :
Code : HTML | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
<head>
<title>Bienvenue sur mon site !</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body>
</body>
</html>
|
C'est bien joli tout ce code, mais ça ne ressemble pas au résultat visuel qu'on a l'habitude de voir lorsqu'on navigue sur le web.
L'objectif est justement de transformer ce code en un résultat visuel : le site web.
C'est le rôle du moteur web.
Voici son fonctionnement, résumé dans un schéma très simple :
Ca n'a l'air de rien, mais c'est un travail difficile : réaliser un moteur web est très délicat. C'est généralement le fruit des efforts de nombreux programmeurs experts (et encore, ils avouent avoir du mal

). Certains moteurs sont meilleurs que d'autres, mais aucun n'est parfait ni complet. Comme le web est en perpétuelle évolution, il est peu probable qu'un moteur parfait sorte un jour.
Quand on programme un navigateur, on utilise généralement le moteur web sous forme de bibliothèque.
Le moteur web n'est donc pas un programme, mais il est utilisé par des programmes.
...
...
Ce sera plus clair avec un schéma.

Regardons comment est constitué Firefox par exemple :
On voit que le navigateur (en vert) "contient" le moteur web (en jaune au centre).
La partie en vert est habituellement appelée le "chrome", pour désigner l'interface.
Mais c'est nul ! Alors le navigateur web c'est juste les 2-3 boutons en haut et c'est tout ?
Oh non ! Loin de là.
Le navigateur ne se contente pas de gérer les boutons "Précédente", "Suivante", "Actualiser", etc. C'est aussi lui qui gère les marque-pages (favoris), le système d'onglets, les options d'affichage, la barre de recherche, etc.
Tout cela représente déjà un énorme travail ! En fait, les développeurs de Firefox ne sont pas les mêmes que ceux qui développent son moteur web. Il y a des équipes séparées, tellement chacun de ces éléments représente du travail.
Les principaux navigateurs et leurs moteurs
Un grand nombre de navigateurs ne s'occupent pas du moteur web. Ils en utilisent un "tout prêt".
De nombreux navigateurs sont basés sur le même moteur web. Voici un petit schéma de mon crû qui vous permet de vous donner une idée un peu de "qui utilise quoi" :
Les noms des moteurs web ne sont pas connus du grand public. D'ailleurs, il est probable que vous n'ayez entendu parler d'aucun d'eux jusqu'à aujourd'hui. Ce qui est connu, c'est le navigateur, alors que c'est le moteur web qui se tape tout le sale boulot.
Je n'ai pas mis tous les navigateurs et moteurs web existants, mais cela permet déjà d'avoir une bonne idée de ce qui se passe.
Comme vous le voyez, rares sont les navigateurs à avoir leur propre moteur web. On peut noter l'exception d'Opera (et encore, le moteur a été revendu à Adobe qui ne voulait pas en coder un pour son logiciel Dreamweaver).
Tout ça pour dire quoi ? Eh bien déjà que
créer un moteur web n'est ni de votre niveau, ni du mien. Comme de nombreux navigateurs, nous en utiliserons un déjà existant.
Lequel ? Eh bien il se trouve que Qt (oui, parce qu'on parle de Qt ici, j'espère que vous n'avez pas oublié

), Qt donc vous propose depuis peu d'utiliser le moteur WebKit dans vos programmes. C'est donc ce moteur-là que nous allons utiliser pour créer notre navigateur.
Configurer son projet pour utiliser WebKit
WebKit est un des nombreux modules de Qt. Il ne fait pas partie du module "GUI", dédié à la création de fenêtres, il s'agit d'un module à part.
Pour pouvoir l'utiliser, il faudra modifier le fichier .pro du projet pour que Qt sache qu'il a besoin de charger WebKit.
Voici un exemple de fichier .pro qui indique que le projet utilise WebKit :
Code : Autre1
2
3
4
5
6
7
8
9
10
11
12
13
| ######################################################################
# Automatically generated by qmake (2.01a) mer. 18. juin 11:49:49 2008
######################################################################
TEMPLATE = app
QT += webkit
TARGET =
DEPENDPATH += .
INCLUDEPATH += .
# Input
HEADERS += FenPrincipale.h
SOURCES += FenPrincipale.cpp main.cpp |
D'autre part, vous devrez rajouter l'include suivant dans les fichiers de votre code source faisant appel à WebKit :
Code : C++
Enfin, il faudra joindre 2 nouvelles DLL à votre programme pour qu'il fonctionne : QtWebKit4.dll et QtNetwork4.dll.
Ouf, tout est prêt.
