2012-01-19 31 views
9

Tôi có nội dung HTML chuỗi được tải vào phương thức webEngine theo phương thức loadContent(). Tôi cũng có một số tệp css và hình ảnh được sử dụng trong trang này. Mặc dù tôi đặt các tệp này vào cùng một gói của lớp java, trang được tải không thể tìm thấy chúng. Đã tìm tài liệu API và web nhưng không tìm thấy bất kỳ giải pháp tương tự nào phù hợp. Làm cách nào để tải các tệp này?Cách tiếp cận tệp css và hình ảnh từ trang html được tải bởi javafx.scene.web.WebEngine # loadContent?

Trả lời

7

Bạn cần phải thiết lập đường dẫn địa phương của bạn trong chuỗi html cho loadContent cách tiếp theo:

view.getEngine().loadContent(
"<img src='" + getClass().getResource("1.jpg") + "' />"); 
+0

Bạn có biết làm thế nào để làm điều này cho một BufferedImage trong bộ nhớ? – alistair

+0

@alistair bạn có thể sử dụng lớp ImageIO, nó có một phương thức để đọc Ảnh đệm. –

10

Bạn có thể đặt chuỗi nội dung html của bạn trong một tập tin trong gói giống như lớp Java và sử dụng phương pháp engine.load(String url) thay :

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

Khi bạn thực hiện việc này, tất cả các liên kết tương đối trong trang html sẽ giải quyết tài nguyên (ví dụ: css và tệp hình ảnh) trong gói Java của bạn.

Hãy coi chừng rằng nếu bạn đang tải tài nguyên nằm trong tệp jar, giao thức jar: không hiểu liên kết tương đối với chỉ định cha mẹ. Ví dụ: <img src="../images/image.png"/> sẽ không hoạt động nhưng <img src="/images/image.png"/> hoặc <img src="images/image.png"/> sẽ dài (khi bạn đặt hình ảnh vào vị trí thích hợp trong tệp jar). Giao thức file: không có giới hạn như vậy và .. liên kết tương đối sẽ hoạt động tốt khi tài nguyên được tải bằng cách sử dụng nó.

Nếu chuỗi html được tạo động bởi mã java của bạn chứ không phải tĩnh, thì giải pháp của Sergey có lẽ là tốt nhất.

3

Tôi vừa phát hiện ra rằng việc sử dụng thẻ <base> trong HTML cũng hiện các trick:

<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> 

Nếu bạn tải đoạn mã trên qua engine.loadContent(String) sau đó image.png sẽ được nạp từ /absolute/path/to/your/docroot/image.png.

Phương pháp này dễ dàng hơn nếu bạn cần tải nhiều tài nguyên vì bạn chỉ phải chỉ định đường dẫn tuyệt đối tại một nơi duy nhất.

Điều này đã được thử nghiệm với WebView của Java 8u25.

0

Hãy thử điều này

<link href="file:css\default.css" rel="stylesheet" type="text/css" /> 
Các vấn đề liên quan