8

私がやりたいことは、Web ページの HTML コンテンツ (現在 WebView エンジン内にロードされている) の一部を独自の HTML コンテンツに置き換えることです。

簡単な例として、ロードされたすべてのページ本体の背景色を赤に置き換えたいとします。つまり、既存のボディ bgcolor 属性を独自の値で追加または置換する必要があります。それを達成するために私は何をすべきですか?

以下は、JavaFX WebView コンポーネントに基づく基本的なブラウザー コードです。

public class BrowserTest extends Application
{
    public static void main ( String[] args )
    {
        launch ( args );
    }

    public void start ( Stage stage )
    {
        stage.setTitle ( "WebView" );

        Browser browser = new Browser ();
        browser.load ( "http://google.com" );

        Scene scene = new Scene ( browser );
        stage.setScene ( scene );

        stage.show ();
    }

    public class Browser extends Region
    {
        final WebView browser;
        final WebEngine webEngine;

        public Browser ()
        {
            super ();
            browser = new WebView ();
            webEngine = browser.getEngine ();
            getChildren ().add ( browser );
        }

        public void load ( String url )
        {
            webEngine.load ( url );
        }

        private Node createSpacer ()
        {
            Region spacer = new Region ();
            HBox.setHgrow ( spacer, Priority.ALWAYS );
            return spacer;
        }

        protected void layoutChildren ()
        {
            double w = getWidth ();
            double h = getHeight ();
            layoutInArea ( browser, 0, 0, w, h, 0, HPos.CENTER, VPos.CENTER );
        }

        protected double computePrefWidth ( double height )
        {
            return 750;
        }

        protected double computePrefHeight ( double width )
        {
            return 500;
        }
    }
}

いくつかの Oracle ドキュメントにこの手法の良い例がありましたが、前回の JavaFX とサイトの更新以降、まったく見つかりませんでした。多分誰かが古いドキュメントへのリンクを持っています...

注:また、 jewelseaは変更後 (ページが読み込まれたとき) を行うための良い方法を提供しましたが、WebView がページをレンダリングする二重のジョブを実行しないように、私の場合は正確に「読み込み中」のソリューションが必要です (前と前)。変更後)。

4

2 に答える 2

8

リスナーをWebEngine ドキュメント プロパティに追加し、それが変更された場合:

アップデート

処理中の html ソースをインターセプトし、WebView に到達する前に潜在的に変更するには、独自の UrlConnection ハンドラーを実装できます。これは、私が過去に成功裏に達成できたことです。これを行う方法に関する背景情報とポインタについては、id jsmith の下にある私の長いフォーラム投稿のオプション 3 を参照してください。これを行うための鍵は、URL.setURLStreamHandlerFactory(myHandlerFactory)を設定することです。

于 2012-06-25T17:37:02.670 に答える
2

少し遅れていますが、次のことができます。

  1. ページを読み込みます (画面にコンポーネントを表示せずに)。
  2. ドキュメント構造で必要なものを変更します。
  3. ステージを表示します。

変更されたコンテンツが表示され、ユーザーに表示されるようになります。

于 2016-08-08T11:19:38.543 に答える