Как добраться до 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.


попробуй такое

<link href="file:css\default.css" rel="stylesheet" type="text/css" />