如何从javafx.scene.web.WebEngine #loadContent加载的html页面中获取css和图像文件?
我有一个String HTML内容,通过loadContent()
方法加载到webEngine
。 我还有一些在此页面中使用的CSS和图像文件。 虽然我把这些文件放在java类的同一个包中,但是加载的页面找不到它们。 寻找API文档和Web,但找不到任何适合的类似解决方案。 我如何加载这些文件?
您需要在html字符串中为loadContent
设置本地路径:
view.getEngine().loadContent( "");
您可以将字符串html内容放在与Java类相同的包中的文件中,并使用engine.load(String url)
方法:
engine.load(getClass().getResource("mypage.html").toExternalForm());
执行此操作时,html页面中的所有相对链接将解析为Java包中的资源(例如css和图像文件)。
请注意,如果要加载位于jar文件中的资源,则jar:
协议不会理解与父指定符的相对链接。 例如, 将不起作用,但
或
会一样长(将图像放在jar文件中的适当位置)。
file:
协议没有这样的限制,并且当使用它加载资源时,相对链接将正常工作。
如果html字符串是由你的java代码而不是静态生成的,那么谢尔盖的解决方案可能是最好的。
我刚刚发现在HTML中使用
标签也可以解决问题:
The slash at the end of the href is important!
如果通过engine.loadContent(String)
加载上述代码, engine.loadContent(String)
从/absolute/path/to/your/docroot/https://stackoverflow.com/questions/8923801/how-to-reach-css-and-image-files-from-the-html-page-loaded-by-javafx-scene-web-w/image.png
加载/absolute/path/to/your/docroot/https://stackoverflow.com/questions/8923801/how-to-reach-css-and-image-files-from-the-html-page-loaded-by-javafx-scene-web-w/image.png
。
如果需要加载多个资源,则此方法更容易,因为您只需在单个位置指定绝对路径。
这已经使用Java 8u25的WebView
进行了测试。
尝试这个