javafx webview加载本地css文件

时间:2014-05-15 16:02:26

标签: java html css webview javafx

我有一个WebView,它加载了我在项目中保存的本地html文件。我使用以下内容加载文件:

InputStream is = Browser.class.getResourceAsStream(location);
String str = "";
int i;
while((i = is.read()) != -1){
    str += (char)i;
}

str = str.replace("{placeholder_1}", value1);
str = str.replace("{placeholder_2}", value2);


webEngine.loadContent(str);

在HTML中我有一个指向css文件的链接。 HTML文件和css文件位于同一目录中,但在WebView中加载页面时,不会加载css文件。以下是我从HTML中调用css文件的方法:

<link rel="stylesheet" href="main.css" />

为什么文件没有加载?据其他人说,这就是他们这样做的方式,并且它正在发挥作用。为什么它对我不起作用,我做错了什么?

这是目录布局:

Directory Listing

2 个答案:

答案 0 :(得分:3)

将css文件放在与html文件相同的目录中,如果

,则可以使用
webView.getEngine().load(location);

被使用。但是它不适用于loadContent()。您需要将css文件位置明确定义为:

(伪代码)

str = str.replace("href='main.css'", 
                  "href='" + getClass().getResource("main.css") + "'");

答案 1 :(得分:1)

以下内容对我有用

项目结构

Application
|
 src
    |
    package
           |
           WebViewLoadLocalFile.java
           test.html
           test.css

<强> WebViewLoadLocalFile

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.BorderPane;
import javafx.scene.web.WebView;
import javafx.stage.Stage;

public class WebViewLoadLocalFile extends Application {

    @Override
    public void start(Stage stage) throws Exception {
        BorderPane borderPane = new BorderPane();
        WebView webView = new WebView();
        String url = getClass().getResource("test.html").toExternalForm();
        webView.getEngine().load(url);
        borderPane.setCenter(webView);
        final Scene scene = new Scene(borderPane);
        stage.setScene(scene);
        stage.setHeight(300);
        stage.setWidth(250);
        stage.show();

    }

    public static void main(String[] args) {
        launch(args);
    }
}

<强>的test.html

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Insert title here</title>
<link rel="stylesheet" href="test.css" />
</head>
<body>
Test HTML
</body>
</html>

<强> test.css

body
{
  background-color:#d0e4fe;
}