无法让 JavaScript 在 WebView 中工作

Can''t get JavaScript to work in WebView

我有一个相当简单的 JavaFX 应用程序。它有一个 window,一分为二。左边是一个表视图,列出了数据库中的行。当您 select 其中一行时,它会在右侧的网络视图中显示 XML (也来自数据库)。到目前为止,一切都很好。我这辈子都无法让任何类型的 JavaScipt 工作。我的最终目标是进行搜索并突出显示工作(如 great post 中所示)。根据我在那里遇到的问题,我想我会尝试通过插入一个简单的 JavaScript 函数来简化问题HTML.

如果相关的话,我正在使用 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 中,该功能就可以正常工作。 我做错了什么?

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

但我决定在我的项目中推出相同的功能。我的要求是 语法高亮 选定的文本高亮 ,所以这就是我想出的:(代码并没有真正优化,只是工作和演示如何做到)

这是 1 post 的巨大代码,所以我将只解释重要部分和 post 演示 git link。 Java git path., Resources git path

  • Google-用于语法高亮的代码美化库
  • JQuery + 2 个用于选定文本高亮的 js 函数。
  • 最初我将 template HTML 文件作为字符串加载并修复 css 和 js links,因为我将它们存储在本地并且不知道如何在 html
  • 中设置相对路径
  • 然后我将 html encoded XML 包装在模板 HTML

Old Post works only for webView.getEngine().load():

I don't know what's inside test() js function, but this code looks fine to me. The problem can be when you append your js to the page, because webView.getEngine().load() and webView.getEngine().loadContent(); are both assync tasks, so you have to add listener like this:

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
                    }
                }
            });

And here is working demo code: https://gist.github.com/varren/1fb41536f2b95f69be4e