JavaFx WebEngine.executeScript在网页上未加载Firebug-lite的情况下失败

时间:2018-07-27 19:56:04

标签: javafx webview firebug-lite webengine

我一直在编写带有两个WebView的JavaFx,其中一个通过对WebEngine.executeScript(functionName(lot of data))的定时调用来更新。在获取WebEngine辅助程序并等待成功获得更改状态后进行调用。它一直在工作。在清理过程中,我从开发期间用于检查进度的页面上删除了firebug-lite。现在,它不起作用。

如果我从NetBeans(8.2)中的控制台日志中获取脚本,则将页面加载为chrome并调用(将其粘贴到)控制台视图中,它将起作用。我可以取消注释包含“ getfirebug.com”的脚本元素,它的工作原理与以前一样。似乎firebug-lite(1.2版)脚本中缺少某些内容,可以捕获错误或在代码中重新定义导致错误的内容。我正在网页中使用jquery-3.2.1.js。

data_eng.getLoadWorker().stateProperty().addListener(
    new ChangeListener<State>() {
            @Override
            public void changed(ObservableValue ov, 
                                State oldState, 
                                State newState) {
                if (newState == State.SUCCEEDED) {
                    Object executeScript = 
                        data_eng.executeScript( **stScriptText**) ;
                    System.out.println(executeScript.toString());
                }
            }
        });

调用上述命令时,NetBeans控制台中不会显示任何错误。但这行不通。 NetBeans控制台中显示的唯一错误是在加载或不加载firebug-lite网页后关闭Webview之后发生的。 (线程“ JavaFX应用程序线程” netscape.javascript.JSException中的异常:TypeError:未定义不是函数。)

更新(现在可以使用):

我为此工作了几个小时。因为这是我使用JavaFx的第一个项目,所以我对这个框架了解很多。基本上,我死锁了辅助线程,等待从未发生过的状态更改。 FireBug必须运行计时器驱动的功能,这些功能会导致状态更改。  通过在计时器线程上执行后台信息收集并使用Platform.runLater()将新内容发送到WebView而无需“侦听” LoadWorker状态,可以解决此问题。由于WebView位于主线程上,因此当WebView并不繁忙时,似乎会触发Platform.runLater。似乎可以,但是它现在可以正常工作。

评论将不胜感激,因为我仍然觉得自己缺少一些东西。此NetBeans / JavaFx编程环境的新增功能。我将其推荐给我的客户,因为它可以更好地“适合”手头的任务。它正在解决,但让我有些紧张。

0 个答案:

没有答案