【发布时间】:2012-06-26 16:08:30
【问题描述】:
我想做的是用我自己的 HTML 内容替换网页 HTML 内容的某些部分(当前正在 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 就不会做两次渲染页面的双重作业(更改前后)。
【问题讨论】: