2015-01-08 3 views
1

У меня есть JavaFXWebView, который обновляется с помощью фоновых сообщений и выполняет скрипты для обновления страницы.JavaFX WebView/WebEngine

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

Это нормально работает правильно, но когда я создаю второйWebView с собственным WebEngine и попытаться выполнить foo2() на этой второй странице, примерно в то же время, как исполнение foo1 на первой странице, Я получаю это:

JSException: TypeError: 'undefined' is not a function

Я мог бы блок синхронизации, но мне кажется, это должно быть ненужным, так как webEngines, предполагают, чтобы быть независимыми, существуют другие Soluti Дополнения?

+0

Вы действительно должны использовать более описательное название –

ответ

1

Это ошибка управления сеансом в вашей программе.

2 WebViews конкурируют за один и тот же сеанс и ... при условии, что вы не реализовали обработчики протоколов и сеансов, включая хранилище файлов cookie и т. Д. ..., второй веб-узел, который не может получить соединение, будет запускать скрипт над чем-то, чего не существует (насколько это касается веб-сайта), следовательно, НЕ УКАЗАННЫЙ объект .. таким образом, ошибка.

Я использую этот материал по протоколам HTTPS и испытал это.