【问题标题】:Can''t get JavaScript to work in WebView无法让 JavaScript 在 WebView 中工作
【发布时间】:2015-08-26 09:00:37
【问题描述】:

我有一个相当简单的 JavaFX 应用程序。它有一个窗口,一分为二。左边是一个表格视图,列出了数据库中的行。当您选择其中一行时,它会在右侧的 web 视图中显示 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 中,则该功能可以正常工作。 我做错了什么?

【问题讨论】:

  • 我对我的帖子进行了更改。看一看。看看你如何添加你的js和XML也是g8

标签: javafx javafx-8 javafx-webengine


【解决方案1】:

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

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

这是 1 篇文章的巨大代码,所以我将只解释基本部分并发布演示 git 链接。 Java git path., Resources git path

  • 用于语法高亮的 Google-code-prettify 库
  • JQuery + 2 个用于选定文本突出显示的 js 函数。
  • 最初我将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

【讨论】:

  • 将监听器添加到我的代码后,当我尝试执行脚本方法时出现此错误:netscape.javascript.JSException: ReferenceError: Can't find variable: $
  • 好吧,好吧,这越来越奇怪了。如果我插入一个“真实”的 url (webView.getEngine().load(someurlgoeshere),一切正常。当我使用 loadContent 加载 xml 消息时,就会出现错误,
  • 非常感谢!一旦我使用您的方法将 XML 注入 HTML,它就可以完美运行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-03
  • 2015-04-07
  • 1970-01-01
  • 2020-03-14
  • 1970-01-01
相关资源
最近更新 更多