[英]JavaFX 2 WebView URL Listener
使用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页面中加载的资源数据来自内容管理系统,因此使用相对路径不起作用。
创建自己的URL协议处理程序并使用以下命令安装:
URL.setURLStreamHandlerFactory(new HandlerFactory());
Java URL协议处理程序的新时代文章提供了有关创建处理程序的详细说明。
WebView可以使用您的自定义协议来加载您的内容。
最简单的方法是在加载之前将html中的运行时值替换为local:
resource。 例如:
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
如果在本地加载html文件,则只需使用相对路径:
这是一个使用相对脚本加载html的示例。 http://code.google.com/p/jfx-gap/source/browse/src/main/java/com/googlecode/jfxgap/JFXGap.java
诀窍应该是html中的相对路径。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.