Javafx 无法使JavaScript在WebView中工作

Javafx 无法使JavaScript在WebView中工作,javafx,javafx-8,javafx-webengine,Javafx,Javafx 8,Javafx Webengine,我有一个相当简单的JavaFX应用程序。它有一个窗口,一分为二。左侧是一个表视图,列出数据库中的行。当您选择其中一行时,它也会在右侧的Web视图中显示来自数据库的XML。到现在为止,一直都还不错。我一辈子都不能让任何类型的JavaScipt工作。我的最终目标是得到一个搜索和突出的工作,如在这。基于我在那里遇到的问题,我想我应该尝试通过在HTML中插入一个简单的JavaScript函数来简化问题 如果相关的话,我正在使用FXML。我有一个按钮,它的OnAction属性调用此方法: @FXM

我有一个相当简单的JavaFX应用程序。它有一个窗口,一分为二。左侧是一个表视图,列出数据库中的行。当您选择其中一行时,它也会在右侧的Web视图中显示来自数据库的XML。到现在为止,一直都还不错。我一辈子都不能让任何类型的JavaScipt工作。我的最终目标是得到一个搜索和突出的工作,如在这。基于我在那里遇到的问题,我想我应该尝试通过在HTML中插入一个简单的JavaScript函数来简化问题

如果相关的话,我正在使用FXML。我有一个按钮,它的OnAction属性调用此方法:

    @FXML
    private void searchBrowser() {
        if (webEngine.getDocument() != null) {
            highlight(searchField.getText());           
        } 
    }

    @FXML
    private void highlight(String text) {
        webEngine.executeScript("test()");
它不会抛出任何错误,并且两个方法都是按顺序调用的。没有别的事发生。测试函数在HTML中,只是一个简单的警报。如果我只保存HTML并将其加载到Chrome或IE中,该函数就可以正常工作。
我做错了什么?

首先,我找不到简单的方法来修复webView.getEngine.loadContent;的旧版本

但我决定在我的项目上推广同样的功能。我的要求是突出显示语法和选定的文本,所以我想到的是:代码并没有真正优化,只是工作并演示了如何实现

这是一篇文章的巨大代码,所以我将只解释基本部分和演示后的git链接

谷歌代码美化库的语法亮点 JQuery+2 js函数用于选中的文本高亮显示。 最初,我将模板HTML文件作为字符串加载,并修复css和js 链接,因为我将它们存储在本地,不知道如何在html中设置相对路径 然后我将html编码的XML包装到html模板中 旧帖子仅适用于webView.getEngine.load:

我不知道testjs函数中包含什么,但这段代码看起来 我很好。问题可能是当您将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
                    }
                }
            });
下面是工作演示代码:


在将侦听器添加到代码中之后,当我尝试执行脚本方法时,会出现以下错误:netscape.javascript.JSException:ReferenceError:not find variable:$。好的,这是wierd。如果我插入一个真正的url webView.getEngine.load,一切都会正常工作。当我使用loadContent加载xml消息时,我得到了错误,非常感谢!一旦我使用您的方法将XML注入HTML,它就工作得非常好。看一看。g8也将看到如何添加js和XML