Rusé comme le serpent
Nous avons donc un système d’aide dont la visionneuse est interchangeable via une factory. Nous avons deux implémentations fournies en base. L’une ne fonctionne que la moitié du temps et l’autre fonctionne toujours mais ne donne pas les résultats escomptés. On peux maintenant retrousser ses manches, et créer sa propre visionneuse. Il « suffirait » de coder de A à Z un moteur HTML en java. Il « suffirait » d’être un peu tapé du ciboulot et d’avoir du temps libre devant soi. Beaucoup de temps libre!
Et bien mes amis, des fous sur le net, on en trouve. Je vous présente le projet Lobo qui fournit un navigateur internet 100% java. Sans la moindre librairie native, ce projet vise au support du HTML 4, CSS2 et javascript. Ce n’est pas encore parfait, mais les tests que vous allez voir sont assez concluant. De plus, cette librairie est séparée clairement en deux modules: Le navigateur (menu, préférences etc) d’un coté et le moteur HTML/CSS/Javascript de l’autre. Ce dernier est appelé « Cobra ».
Dans le billet de Roger Brinkley que j’ai mentionné à la page précédente, on trouve aussi des suggestions pour réutiliser la visionneuse JDIC avec n’importe que pseudo classe « Browser ». Celle-ci aurait juste besoin d’une méthode « setUrl ». C’est donc ce que j’ai réalisé. Le temps de développement, incluant le téléchargement de Cobra: 1h. Ce petit cours aura été plus long à écrire!
Le principe est de reprendre le code source de javax.help.plaf.basic.BasicNativeContentViewerUI, d’en retirer ce qui concerne JDIC et d’y mettre à la place ce qui concerne Cobra. Rien de bien dur en soit. Voici le genre de remplacements à faire dans code:
1
2
3
4
5
6
7
8
9 // ancien code
//html = new WebBrowser();
//html.setUrl(location);
// nouveau code
html = new HtmlPanel();
UserAgentContext ucontext = new SimpleUserAgentContext();
rcontext = new SimpleHtmlRendererContext(html, ucontext);
rcontext.navigate(url,"_top");
Des changement similaires sont a faire dans le reste de la classe. A noter que HtmlPanel, contrairement au « browser » de JDIC, ne dois pas etre placé dans un JScrollPane (il intègre déjà le sien). Le code complet est disponible en dernière page.
Notez aussi que la modification de BasicNativeContentViewerUI nécessite d’en respecter la licence qui est une GPL. Si ça vous pose problème, vous devrez implémenter vous même un classe étendant HelpContentViewerUI et utiliser uniquement la distribution binaire de JavaHelp. Rien d’énorme, mais un peu plus de travail quand même.
le composant « Browser » du SWT, autant que je sache, utilise le même principe que JDIC.
Super intéressant …
J’avais pour d’autre besoin html utilisé SWT et son composant Browser (le problème des librairies natives doit être le même qu’avec JDIC)
Et j’avais même trouvé une intégration Swing de ce composant SWT.
Lobo et Cobra, c’est bon à savoir.