2015-06-10 4 views
1

У меня довольно простое приложение JavaFX. У этого есть одно окно, разделенное на два. Слева находится табличное представление, в котором перечислены строки из базы данных. Когда вы выбираете одну из строк, она отображает XML (также из базы данных) в webview справа. Все идет нормально. Я не могу на всю жизнь получить какую-то работу JavaScipt. Моя конечная цель - получить поиск и выделить работу (как в этом great post.Согласно моим проблемам, я подумал, что попытаюсь упростить ситуацию, просто включив в HTML простую функцию JavaScript.Невозможно получить JavaScript для работы в WebView

I ' м. с использованием 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, функция отлично работает. Что я делаю неправильно?

+0

Я внесла изменения в свое сообщение. Взглянуть. И было бы также g8 посмотреть, как вы добавляете вас js и XML – varren

ответ

2

Прежде всего, я не могу найти простой способ исправить старую версию для webView.getEngine().loadContent();.

Но я решил нажать ту же функцию в своем проекте. Мои требования, где синтаксической изюминкой и выделенный текст выделите, так вот что я придумал: (код не очень оптимизирован, просто работает и показывает, как это можно сделать)

Это огромный код 1 post, поэтому я просто объясню основные детали и отправлю demo git link. Java git path., Resources git path

  • Google-кода приукрасить LIB для синтаксической подсветки
  • JQuery + 2 Js функции для выбранного текста подсветки.
  • Изначально я загружаю template HTML файл в виде строки и исправить CSS и JS ссылки, потому что я хранить их локально и не имею ни малейшего представления о том, как установить относительный путь в HTML
  • Тогда я обернуть html encoded XML в шаблоне HTML

enter image description here

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

+0

После добавления слушателя к моему коду я получаю эту ошибку, когда я пытаюсь выполнить метод сценария запуска: 'netscape.javascript.JSException: ReferenceError: не удается найти переменную : $ '. – Andrew

+0

Ну, ладно, это становится странным. Если я подключу «настоящий» url (webView.getEngine() .load (http: // someurlgoeshere), все работает. Когда я загружаю xml-сообщение с помощью loadContent, вот когда я получаю ошибку, – Andrew

+0

Большое вам спасибо! Как только я использовал ваш метод для ввода XML в HTML, он работал отлично. – Andrew