哪些纯Java HTML查看器和渲染器可用?要求是:
JComponent
窗口中的Scrollable
接口。我只知道一些组件和项目,其中一些已经不存在了:
JEditorPane
,支持HTML 3.2(从Java 1.4开始)javax.swing.text.html.HTMLEditorKit
)JWebPane
(它曾被释放过吗?)答案 0 :(得分:33)
从Java 8开始,您可以使用JavaFX的WebView Component,它也可以是used in Swing。
代码简单如下:
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 ) );
});
它由WebKit引擎支持(版本依赖于JRE并且是合理的最新版本)。 但请记住,它不是一个完整的浏览器,所以不要指望支持HTML5音频/视频。 否则,它会像浏览器一样运行HTML + CSS + JS。
从技术上讲,底层引擎是C ++,而不是本机Java。 但它捆绑在Oracle的官方JRE中,不需要库,零配置,与Java FX一样跨平台,并且正在积极更新和维护。
对于大多数用例而言,与原生Java一样好,我想?
以下信息已过时,因为我们现在已经使用Java WebView了。
尝试Cobra/Lobo,CSSBox和Flying Saucer,都是纯Java。其他人是本地的或商业的。
内容:动态生成的简单HTML(作为字符串),嵌入式CSS 2.1,无JS。
简短的故事:Flying Saucer最简单易用,渲染最正确,但你最好完全控制内容。否则寻找原生解决方案。
长篇故事:
CSSBox似乎更活跃,但它似乎取决于一些第三方库。例如,演示依赖于使用apache xerces的nekohtml,它改变了默认Java 1.7 sax解析器的工作方式并破坏了我的程序,但当我强制它使用java的内置xerces时,我得到ClassCastException (InlineBox to BlockBox)
。最后无法让它工作。另外,还没有找到替换现有BrowserCanvas
文档的方法。
不再维护Cobra,必须手动修复incompatibility issue才能使其在1.7中运行。还需要抓住mozilla Rhino(不使用任何JS),但就是这样。之后它相当顺利,只需要让Logger隐藏绘制消息。渲染是正确的,速度是公平的 - 只要文档很简单。当你开始使用不太常见的标签或更复杂的布局时,Cobra会很快崩溃。
飞碟在撰写时具有最好的CSS支持(2011年2月)。安装非常简单(例如,不需要设置像cobo这样的文档或像cssbox这样的domparser)几乎没有依赖 - 这也意味着没有javascript。但飞碟对你喂它的东西非常严格。源必须是格式良好的XML,例如样式和脚本可能必须包装在CDATA中,如果使用html实体,则必须声明DTD(因此没有html5 doctype)。但是,如果您要嵌入可以控制的内容,那么它可能是您的最佳选择。
答案 1 :(得分:10)
如果您使用的是Swing,则可以嵌入JavaFX WebView。
1)应该将JComponent接口实现放置在Scrollable窗格中。
为了将WebView添加到Swing,您需要将其添加到JFXPanel,这是一个JComponent。 为了使WebView填满整个JFXPanel,我使用了一个像这样的AnchorPane:
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);
每当您运行JavaFX代码时,请确保在Platform.runLater()中运行它。
2)最好是免费解决方案;开源是一个加号。
嗯,这是纯粹的Oracle java。
3)作为maven工件的可用性是一个优势。
有关集成JavaFX和Maven的建议,请参阅StackOverflow答案Maven project with JavaFX (with jar file in `lib`)。
JavaFX上的Java8将完全集成在Java中。
Additonal Pros: - 支持HTML5和JavaScript(使用webkit) - 支持平台互操作性 -even支持与DOM交互,运行JavaScript,从Webview获得事件通知。
缺点: -JavaFX需要安装。但是自从v7u6(2012年8月)以来它与java捆绑在一起。
其他经历:
我尝试了djproject,但在平台互操作性方面遇到了很多问题。在Windows上工作得很好,但只有在Linux上付出了巨大努力,我无法在Mac上运行它。对于每个平台,您还需要构建一个32位和64位版本的jar。经过大量的努力和一个巨大的jar文件,你可以将所有东西合并在一个罐子里。但这远非方便。
与我上面提到的JavaFX解决方案相比,DJProject是一个更大的痛苦。
答案 2 :(得分:2)
您还可以通过以下方式访问本机浏览器: http://djproject.sourceforge.net/ns/
对于某些网页,这有时是唯一的方法。总是存在折衷。
我还没有找到一个呈现良好,开源且足够灵活的浏览器组件。眼镜蛇很接近,但有些页面无法渲染,而且很难(不可能?)做一些事情,比如摆脱自己的滚动条等等。
答案 3 :(得分:2)
CSSBox可能正是您所寻找的:http://cssbox.sourceforge.net
答案 4 :(得分:1)
查看此文章:http://devdaily.com/blog/post/jfc-swing/how-create-simple-swing-html-viewer-browser-java
它使用JEditorPane和其他一些Swing类来解析和渲染HTML,还有CSS。
答案 5 :(得分:0)
Flying Flying正在完成这项工作,但是下面的渲染文本示例对于我在Linux Java上的移动应用程序开发来说是一个巨大的挫折:
Sometimes the period at the end changes line without the text beside
.
此外,与JTextPanel不同,文本不可选。
Parser似乎只接受UTF-8编码。解析时我无法强制使用自己的编码。