JavaFX 2 WebView URL侦听器

时间:2012-11-20 19:26:03

标签: java javafx-2

使用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页面中加载的资源数据来自内容管理系统,因此使用相对路径无效。

3 个答案:

答案 0 :(得分:5)

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

URL.setURLStreamHandlerFactory(new HandlerFactory());

A New Era for Java URL Protocol Handlers article提供了有关创建处理程序的详细说明。

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

答案 1 :(得分:1)

最简单的方法是在加载之前将local:资源替换为html中的运行时值。 E.g:

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(); }
}

N.B。:这是工作样本,只需将1.jpg图像放在与此文件相同的位置。

如果确实希望使用javascript中的java类,则可以使用“JavaFX to JavaScript bridge”功能。在这里查看教程:https://blogs.oracle.com/javafx/entry/communicating_between_javascript_and_javafx

答案 2 :(得分:0)

如果您在本地加载html文件,则只需使用相对路径:

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

技巧应该是html中的相对路径。