我有一个字符串HTML内容,它通过webEngine
方法加载到loadContent()
。我还有一些在此页面中使用的CSS和图像文件。虽然我把这些文件放在java类的同一个包中,但是加载的页面找不到它们。寻找API文档和Web,但找不到任何适合的类似解决方案。我如何加载这些文件?
答案 0 :(得分:10)
您可以将字符串html内容放在与Java类相同的包中的文件中,而是使用engine.load(String url)
方法:
engine.load(getClass().getResource("mypage.html").toExternalForm());
执行此操作时,html页面中的所有相关链接将解析为Java包中的资源(例如css和图像文件)。
请注意,如果要加载位于jar文件中的资源,则jar:
协议无法理解与父指定符的相对链接。例如,<img src="../images/image.png"/>
将不起作用,但<img src="/images/image.png"/>
或<img src="images/image.png"/>
将一样长(因为您将图像放在jar文件中的适当位置)。 file:
协议没有此类限制,..
相对链接在使用它加载资源时可以正常工作。
如果html字符串是由你的java代码而不是静态代码动态生成的,那么谢尔盖的解决方案可能是最好的。
答案 1 :(得分:8)
您需要在下一行loadContent
的html字符串中设置本地路径:
view.getEngine().loadContent(
"<img src='" + getClass().getResource("1.jpg") + "' />");
答案 2 :(得分:4)
我刚刚发现在HTML中使用<base>
标记也可以解决问题:
<html>
<head>
<title>The slash at the end of the href is important!</title>
<base href="file:///absolute/path/to/your/docroot/" />
</head>
<body>
<img src="image.png"/>
</body>
</html>
如果您通过engine.loadContent(String)
加载上述代码,则会image.png
加载/absolute/path/to/your/docroot/image.png
。
如果您需要加载多个资源,则此方法更容易,因为您只需在单个位置指定绝对路径。
已经使用Java 8u25的WebView
进行了测试。
答案 3 :(得分:0)
试试这个
<link href="file:css\default.css" rel="stylesheet" type="text/css" />