Как получить доступ к файлам CSS и изображениям со страницы HTML, загруженной javafx.scene.web.WebEngine # loadContent? - PullRequest
10 голосов
/ 19 января 2012

У меня есть строковое содержимое HTML, которое загружается в webEngine методом loadContent(). У меня также есть некоторые CSS и файлы изображений, используемые на этой странице. Хотя я поместил эти файлы в один и тот же пакет класса java, загруженная страница не может их найти. Искал API документы и веб, но не мог найти подходящих аналогичных решений. Как я загружаю эти файлы?

Ответы [ 4 ]

10 голосов
/ 19 января 2012

Вы можете поместить содержимое строкового html в файл в том же пакете, что и класс Java, и использовать вместо него метод engine.load(String url):

engine.load(getClass().getResource("mypage.html").toExternalForm());

При этом все относительные ссылки в htmlСтраница будет преобразована в ресурсы (например, файлы CSS и изображения) в вашем пакете Java.

Помните, что при загрузке ресурса, находящегося в файле JAR, протокол jar: не понимает относительные ссылкис родительскими спецификаторами.Например, <img src="../images/image.png"/> не будет работать, но <img src="/images/image.png"/> или <img src="images/image.png"/> будут работать до тех пор, пока вы поместите изображение в соответствующее место в файле jar.Протокол file: не имеет таких ограничений, и относительные ссылки .. будут работать нормально, когда ресурсы загружаются с его использованием.

Если строка html динамически генерируется вашим Java-кодом, а не статическим, то Сергейрешение, вероятно, лучше.

8 голосов
/ 19 января 2012

Вам нужно установить локальные пути в HTML-строке для loadContent следующим образом:

view.getEngine().loadContent(
"<img src='" + getClass().getResource("1.jpg") + "' />");
4 голосов
/ 21 октября 2014

Я только что узнал, что использование тега <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 Java8u25.

0 голосов
/ 05 февраля 2015

Попробуйте это

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