1

我有一个JavaFX WebView正在使用后台消息更新并执行脚本来更新页面。

webEngine.getLoadWorker().stateProperty().addListener(
  new ChangeListener<State>() {
    public void changed(ObservableValue ov, State oldState, State newState) {
        if (newState == State.SUCCEEDED) {
            try {
                webEngine.executeScript("foo1();");  
            } catch (Exception e) {
                // JSException: TypeError: 'undefined' is not a function
            }
        }
    }
});

这通常可以正常运行,但是当我用它自己创建第二个 并尝试在第二页上执行时,与在第一页上执行的时间大致相同,我得到了这个:WebViewWebEnginefoo2()foo1

JSException:TypeError:“未定义”不是函数

我可以有一个同步块,但似乎应该没有必要,因为 webEngines 应该是独立的,还有其他解决方案吗?

4

1 回答 1

1

这是您的程序中的会话管理错误。

2 个 WebViews 竞争同一个会话,并且......假设您没有实现协议和会话处理程序,包括 cookie 存储等......,无法获得连接的第二个 Web 引擎将运行脚本'不存在(就网络引擎而言)因此是一个未定义的对象..因此是错误。

我正在通过 HTTPS 协议使用这些东西,并且经历过这种情况。

于 2015-05-27T16:30:47.863 回答