Visionneuse/moteur de rendu HTML Java pur pour une utilisation dans un volet défilable


Quels visionneurs et moteurs de rendu HTML Java purs sont disponibles? Les exigences sont:

  • , Il doit mettre en œuvre les JComponent interface pour être placé dans Scrollable le volet.
  • Ce devrait être de préférence une solution libre; l'open source est un plus.
  • Sa disponibilité en tant qu'artefact Maven est un plus.

Je ne connais que quelques composants et projets, dont certains sont maintenant disparus:

Author: Makoto, 2010-03-13

7 answers

Depuis Java 8, vous pouvez utiliser le composant WebView de JavaFX, qui peut également être utilisé dans Swing.

Le code est aussi simple que:

JFXPanel jfxPanel = new JFXPanel(); // Scrollable JCompenent
Platform.runLater( () -> { // FX components need to be managed by JavaFX
   WebView webView = new WebView();
   webView.getEngine().loadContent( "<html> Hello World!" );
   webView.getEngine().load( "http://www.stackoverflow.com/" );
   jfxPanel.setScene( new Scene( webView ) );
});

Il est soutenu par le moteur WebKit (la version dépend de JRE et est raisonnablement à jour). Mais gardez à l'esprit que ce n'est pas un navigateur complet, alors ne comptez pas sur le support de, disons, HTML5 audio/vidéo. Sinon, il exécute HTML + CSS + JS aussi bien que votre navigateur.

Techniquement, le moteur sous-jacent est C++, pas Java natif. Mais il est livré dans le JRE officiel d'Oracle, ne nécessite aucune bibliothèque, n'a aucune configuration, est aussi multiplateforme que Java FX et est activement mis à jour et maintenu.

Aussi bon que Java natif pour la plupart des cas d'utilisation, je pense?


Les informations ci-dessous sont obsolètes, car nous avons maintenant WebView en Java.

Essayé Cobra/Lobo, CSSBox, et Soucoupe Volante, toutes les Java pur. D'autres sont indigènes ou commerciaux.

Contenu: HTML simple généré à la volée (sous forme de chaîne), CSS intégré 2.1, pas de JS.

Histoire courte: La Soucoupe volante est la plus simple à utiliser et le rendu est le plus correct, mais il vaut mieux avoir un contrôle total sur le contenu. Sinon recherchez une solution native.

Longue histoire:

CSSBox semble être plus actif, mais il semble dépendre de certaines bibliothèques tierces. Par exemple, la démo dépend de nekohtml qui utilise apache xerces qui a changé la façon dont l'analyseur Java 1.7 sax par défaut fonctionne et a cassé mon programme, mais quand je le force à utiliser les xerces intégrés à java, j'obtiens ClassCastException (InlineBox to BlockBox). Pouvez pas le faire fonctionner à la fin. De plus, nous n'avons toujours pas trouvé de moyen de remplacer le document dans un BrowserCanvas existant.

Cobra n'est plus maintenu, il faut corriger manuellement un problème d'incompatibilité pour le faire fonctionner en 1.7. Aussi besoin de saisir mozilla Rhino (n'utilisant aucun JS) mais c'est tout. Après cela, il est assez lisse, il suffit de demander à Logger de masquer les messages de peinture. Le rendu est correct et la vitesse est juste - tant que le document est simple. Lorsque vous commencez à utiliser des balises moins courantes ou une mise en page plus compliquée, Cobra s'effondre assez rapidement.

La Soucoupe volante a le meilleur support CSS des trois au moment de l'écriture (février 2011). La configuration est très facile (par exemple, pas besoin de configurer un document comme cobo ou dompparser comme cssbox) a peu de dépendance - ce qui signifie également pas de javascript. Mais Soucoupe volante est très stricte sur ce que vous le nourrissez. La source doit être un XML bien formé, par exemple le style et le script peuvent doivent être enveloppés dans CDATA et si vous utilisez des entités html, vous devez déclarer DTD (donc pas de doctype html5). Cependant, si vous intégrez du contenu que vous pouvez contrôler, il peut s'agir de votre meilleur choix.

 32
Author: Sheepy, 2017-05-23 12:17:49

Si vous utilisez Swing, vous pouvez intégrer un WebView JavaFX.

1)Devrait implémenter l'interface JComponent à placer dans le volet défilable.

Pour ajouter le WebView à Swing, vous devez l'ajouter à JFXPanel, qui est un JComponent. Pour que le WebView remplisse le JFXPanel complet, j'ai utilisé un AnchorPane comme ceci:

                final AnchorPane anchorPane = new AnchorPane();
                WebView webBrowser = new WebView();

                //Set Layout Constraint
                AnchorPane.setTopAnchor(webBrowser, 0.0);
                AnchorPane.setBottomAnchor(webBrowser, 0.0);
                AnchorPane.setLeftAnchor(webBrowser, 0.0);
                AnchorPane.setRightAnchor(webBrowser, 0.0);

                //Add WebView to AnchorPane
                anchorPane.getChildren().add(webBrowser);

                //Create Scene
                final Scene scene = new Scene(anchorPane);

                // Obtain the webEngine to navigate
                final WebEngine webEngine = webBrowser.getEngine();
                webEngine.load("http://www.google.com");
                _jfxPanel.setScene(scene);

Chaque fois que vous exécutez du code JavaFX, assurez-vous de l'exécuter dans la plate-forme.runLater ().

2) Devrait être de préférence une solution libre; opensource est un majoré.

Eh bien, c'est du pur java Oracle.

3) La disponibilité en tant qu'artefact maven est un plus.

Voir la réponse StackOverflow Projet Maven avec JavaFX (avec le fichier jar dans `lib`) pour des conseils sur l'intégration de JavaFX et Maven.

De Java8 sur JavaFX sera entièrement intégré en Java.

Avantages supplémentaires: - prend en charge HTML5 et JavaScript (utilise webkit) - supporte l'interopérabilité de la plate-forme - prend même en charge l'interaction avec le DOM, exécuter JavaScript, être averti de les événements de la Webview.

Inconvénients: - JavaFX doit être installé. Mais il est livré avec java depuis v7u6 (août 2012).

Autres expériences: -

J'ai essayé djproject, mais j'ai eu beaucoup de problèmes avec l'interopérabilité de la plate-forme. A très bien fonctionné sur Windows, mais seulement avec un effort majeur sur Linux et je ne pouvais pas le faire fonctionner sur Mac. Pour chaque plate-forme, vous devez également créer une version 32 bits et 64 bits de votre jar. Avec beaucoup d'efforts et un énorme fichier jar vous pourriez éventuellement fusionner tout ensemble dans un bocal. Mais c'est loin d'être pratique.

Par rapport à la solution JavaFX que j'ai mentionnée ci-dessus, le DJProject était une douleur beaucoup plus grande.

 10
Author: haferblues, 2017-05-23 11:54:28

Vous pouvez également accéder au navigateur natif via quelque chose comme: http://djproject.sourceforge.net/ns/

Pour certaines pages web, c'est parfois la seule voie à suivre. Il y a toujours des compromis.

Je n'ai pas encore trouvé un composant de navigateur qui rend bien, est open source et suffisamment flexible en même temps. Cobra se rapproche mais il y a des pages qu'il ne rendra pas et c'est difficile (impossible?) pour faire des choses comme se débarrasser de ses propres barres de défilement,etc..

 2
Author: PSpeed, 2010-03-14 18:27:54

CSSBox pourrait être ce que vous cherchez: http://cssbox.sourceforge.net

 2
Author: stano, 2011-12-09 21:16:27

Découvrez cet article: http://devdaily.com/blog/post/jfc-swing/how-create-simple-swing-html-viewer-browser-java

Il utilise JEditorPane et d'autres classes Swing pour analyser et rendre non seulement HTML, mais aussi CSS.

 1
Author: Sean A.O. Harney, 2010-03-13 12:41:17

Wow haferblues, je n'aurais jamais pensé trouver quelque chose que j'aime à propos de JavaFX. Mais l'implémentation du navigateur est vraiment sympa. Pour ceux (comme moi) qui n'ont jamais utilisé JavaFX avant ici la classe complète (pour l'extrait de haferblues):

import com.sun.javafx.application.PlatformImpl;

import javafx.embed.swing.JFXPanel;
import javafx.scene.Scene;
import javafx.scene.layout.AnchorPane;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;

public class SwingBrowser extends JFXPanel {
    private static final long serialVersionUID = 1L;

    public SwingBrowser(String url) {
        PlatformImpl.startup(new Runnable() {
            @Override
            public void run() {
                final AnchorPane anchorPane = new AnchorPane();
                WebView webBrowser = new WebView();

                // Set Layout Constraint
                AnchorPane.setTopAnchor(webBrowser, 0.0);
                AnchorPane.setBottomAnchor(webBrowser, 0.0);
                AnchorPane.setLeftAnchor(webBrowser, 0.0);
                AnchorPane.setRightAnchor(webBrowser, 0.0);

                // Add WebView to AnchorPane
                anchorPane.getChildren().add(webBrowser);

                // Create Scene
                final Scene scene = new Scene(anchorPane);

                // Obtain the webEngine to navigate
                final WebEngine webEngine = webBrowser.getEngine();
                webEngine.load(url);

                setScene(scene);
            }
        });
    }
}
 0
Author: Bruno Eberhard, 2015-09-10 11:26:20

La Soucoupe volante faisait bien le travail, mais l'exemple de texte rendu suivant a été un énorme tournant pour mon développement d'applications mobiles sur Linux Java:

Sometimes the period at the end changes line without the text beside .

De plus, le texte n'est pas sélectionnable contrairement au JTextPanel.

L'analyseur ne semble accepter que l'encodage UTF-8. Je n'ai pas réussi à forcer mon propre encodage lors de l'analyse.

 0
Author: user1283704, 2016-02-09 22:03:36