Для WebEngine JavaFX, как мне получать уведомления об ошибках javascript?

Я пытаюсь запустить SVG, содержащий Javascript, в JavaFX WebView. Я знаю, что в некоторых сценариях, которые я пытаюсь запустить, есть ошибки, и я пытаюсь выяснить, как вывести их на консоль, чтобы я мог их отлаживать. Я пробовал следующее, но WebErrorEvent никогда не вызывается:

WebEngine webEngine = browser.getEngine();
webEngine.setOnError(new EventHandler<WebErrorEvent>()
{
    @Override
    public void handle(WebErrorEvent event)
    {
        System.err.println(event);
    }
});

Это правильный способ получить обратную связь об ошибке javascript от этого элемента управления?


person kitfox    schedule 13.07.2015    source источник
comment
консоль.лог() ? тревога() ?   -  person zipzit    schedule 13.07.2015
comment
эти функции предназначены для распечатки ваших собственных сообщений. Они не обнаружат попытку вызвать метод для нулевого объекта.   -  person kitfox    schedule 13.07.2015


Ответы (1)


setOnError слушатель работает только с ошибкой при загрузке данного документа.

Один из способов решить эту проблему — вызвать метод Java при вызове console.log. Вы можете сделать это по.

Ваше приложение FX

WebEngine engine = mainWebView.getEngine();
engine.load("http://whereever.com");

engine.getLoadWorker().stateProperty().addListener(new ChangeListener<Worker.State>() {
    @Override
    public void changed(ObservableValue<? extends Worker.State> observable, Worker.State oldValue, Worker.State newValue) {
        JSObject window = (JSObject) engine.executeScript("window");
        window.setMember("java", new Bridge());
        engine.executeScript("console.log = function(message) { java.log(message); }"); // Now where ever console.log is called in your html you will get a log in Java console
   }
});

Ваш класс бриджа

public class Bridge {

    public void exit() {
        Platform.exit();
    }

    public void log(String text) {
        System.out.println(text);
    }

}

Ваш html

<h1>Text Page</h1>
<button onclick="java.log('This is log')">Log</button>
<button onclick="console.log('This produces the same result as above')">Console.log</button>
<button onclick="java.exit()">Exit</button>

Надеюсь, это поможет.

person Adi    schedule 06.05.2017