5

使用 JavaFX (2.2) WebView 时,有没有办法在 java 代码中收听和处理 url?

例如:我正在使用 webEngine.loadContent(html) 将本地 HTML 文件加载到我的 WebView。HTML 包含资源,例如

<script src="local:my-script.js"></script>
<img src="cms:1234.png"/>

这也是一个本地文件,应该从 java 应用程序中提供。所以我想注册一个可以处理来自页面的请求的监听器。

编辑:在 HTML 页面中加载的资源数据来自内容管理系统,因此使用相对路径不起作用。

4

3 回答 3

5

创建您自己的 URL 协议处理程序并使用以下命令安装它:

URL.setURLStreamHandlerFactory(new HandlerFactory());

Java URL 协议处理程序的新时代文章提供了有关创建处理程序的详细说明。

WebView 可以使用您的自定义协议来加载您的内容。

于 2012-11-21T07:45:29.923 回答
1

对您来说最简单的方法是local:在加载它之前用 html 中的运行时值替换资源。例如:

public class WebViewLocal extends Application {
    @Override
    public void start(Stage primaryStage) {
        String st = "<html><head><title>X</title>"
                + "</head><body><img src='local:1.jpg'/>"
                + "</body></html>";
        System.out.println(st);
        primaryStage.setScene(new Scene(loadHtml(st), 400, 400));
        primaryStage.show();
    }

    public WebView loadHtml(String html) {
        html = html.replace("local:", getClass().getResource(".").toString());
        WebView view = new WebView();
        view.getEngine().loadContent(html);
        return view;
    }

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

注意:这是工作示例,只需将1.jpg图像放在与此文件相同的位置即可。

如果您真的想使用 javascript 中的 java 类,您可以使用“JavaFX 到 JavaScript 桥接”功能。看看这里的教程:https ://blogs.oracle.com/javafx/entry/communicating_between_javascript_and_javafx

于 2012-11-20T19:51:07.770 回答
0

如果你在本地加载你的 html 文件,你可以简单地使用相对路径:

这是一个使用相关脚本加载 html 的示例。 http://code.google.com/p/jfx-gap/source/browse/src/main/java/com/googlecode/jfxgap/JFXGap.java

诀窍应该是 html 中的相对路径。

于 2012-11-20T20:13:29.260 回答