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ページ内にロードされるリソースデータはcontent-managemant-systemから取得されるため、相対パスの使用は機能しません。

4

3 に答える 3

5

独自のURLプロトコルハンドラーを作成し、以下を使用してインストールします。

URL.setURLStreamHandlerFactory(new HandlerFactory());

「JavaURLプロトコルハンドラーの新時代」の記事には、ハンドラーを作成するための詳細な手順が記載されています。

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 に答える