Как добраться до css и файлов изображений с html-страницы, загруженной javafx.сцена.сеть.WebEngine#loadContent?
У меня есть HTML-содержимое строки, которое загружается в webEngine
by loadContent()
метод. У меня также есть некоторые css и файлы изображений, используемые на этой странице. Хотя я помещаю этот файл в тот же пакет класса java, загруженная страница не может их найти. Искал документы API и веб-интерфейс, но не смог найти аналогичных решений. Как я загружаю эти файлы?
4 ответов
вам нужно установить локальные пути в строке html для loadContent
следующим образом:
view.getEngine().loadContent(
"<img src='" + getClass().getResource("1.jpg") + "' />");
вы можете поместить содержимое html строки в файл в том же пакете, что и класс Java, и использовать engine.load(String url)
метод вместо этого:
engine.load(getClass().getResource("mypage.html").toExternalForm());
когда вы это сделаете, все относительные ссылки на странице html разрешатся к ресурсам (например, css и файлам изображений) в вашем пакете Java.
остерегайтесь, что если вы загружаете ресурс, который находится в файле jar, что jar:
протокол не понимает относительных связей с родительскими спецификаторами. Е. Г., <img src="../images/image.png"/>
не будет работать, но!--4--> или <img src="images/image.png"/>
будет так долго (как вы поместите изображение в соответствующее место в файле jar). The file:
протокол не имеет таких ограничений и ..
относительные ссылки будут работать нормально, когда ресурсы загружаются через него.
если строка html динамически генерируется вашим java-кодом, а не статическим, то решение Сергея, вероятно, лучше всего.
Я только что узнал, что с помощью <base>
тег в HTML также делает трюк:
<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
.
этот метод проще, если вам нужно загрузить несколько ресурсов, так как вам нужно только указать абсолютный путь в одном месте.
это было протестировано с WebView
Java 8u25.