私がしたいことは、自分のHTMLコンテンツでWebページのHTMLコンテンツ(現在WebViewエンジン内にロードされている)の一部を置き換えることです。ロード中にWebViewコンテンツを部分的に置き換える
単純な例として、ロードしたページ本文の背景色をすべてREDに置き換えたいとします。つまり、既存のbody 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はダブルジョブレンダリングのページを2回(変更前後)行うことはありません。
WebEngineドキュメントの変更についてのお考えをありがとう - それは動作します。しかし、私はまだ若干異なる解決策を探していました。ドキュメントを変更するには、最初にロードを待つ必要があり、WebViewはロードされたドキュメントを少なくとも1回レンダリングします。しかし、私は最初のWebViewのレンダリングの結果が最終的なものになるように、ドキュメントの読み込みを傍受し、受信データを変更したい。私は動作するDOMツリーを解析する必要はありません.HTMLコンテンツを解析して変更するためのツールがあるので、単純なHTML(テキスト)コンテンツで作業するのは大丈夫です。 –
上記の考え方を追加すると、2度目のレンダリングが終了するまでWebViewを装うことができます。これは "ダブルレンダリング"を修正するものではなく、ユーザが最初のものを見るのを妨げるでしょう。 – miniBill
WebViewに読み込まれるストリームを傍受し、潜在的に修正するための情報を追加しました。 – jewelsea