我有一个相当简单的JavaFX应用程序。它有一个窗口,分为两个。左侧是一个列出数据库中行的表视图。当您选择其中一行时,它会在右侧的Web视图中显示XML(也来自数据库)。到现在为止还挺好。我无法为我的生活获得任何类型的JavaScipt工作。我的最终目标是获得搜索并突出显示工作(如此great post。基于我的问题,我认为我只是通过在HTML中插入一个简单的JavaScript函数来尝试简化问题。
我使用FXML,如果相关的话。我有一个按钮,对于它的OnAction属性,调用这个方法:
@FXML
private void searchBrowser() {
if (webEngine.getDocument() != null) {
highlight(searchField.getText());
}
}
@FXML
private void highlight(String text) {
webEngine.executeScript("test()");
它不会抛出任何错误,并且两个方法都按顺序调用。没有其他事情发生。 test()函数在HTML中,只是一个简单的警报。如果我只保存HTML并将其加载到Chrome或IE中,则该功能正常。 我做错了什么?
答案 0 :(得分:2)
首先,我找不到简单的方法来修复webView.getEngine().loadContent();
的旧版本。
但我决定在我的项目上推出相同的功能。我的要求语法高亮和选中的文本突出显示,所以这就是我想出的:(代码没有真正优化,只是工作并演示如何完成)
这是1个帖子的巨大代码,所以我将解释基本部分并发布演示git链接。 Java git path.,Resources git path
template HTML
文件作为字符串加载并修复css和js
链接,因为我在本地存储它们并且不知道如何在html中设置相对路径html encoded XML
包裹在模板HTML
旧帖仅适用于
webView.getEngine().load()
:我不知道
test()
js函数里面有什么,但是这段代码看起来很像 对我好问题可能是当你将js追加到页面时, 因为webView.getEngine().load()
和webView.getEngine().loadContent();
都是同步任务,所以你 必须像这样添加监听器:webView.getEngine().getLoadWorker().stateProperty().addListener( new ChangeListener<Worker.State>() { public void changed(ObservableValue ov, Worker.State oldState, Worker.State newState) { if (newState == Worker.State.SUCCEEDED) { //some append js code here } } });
以下是正在使用的演示代码:https://gist.github.com/varren/1fb41536f2b95f69be4e