5

我正在尝试在 JavaFX 的 WebView 中运行一些包含 Javascript 的 SVG。我知道我尝试运行的一些脚本有错误,并试图弄清楚如何将它们打印到控制台,以便我可以调试它们。我尝试了以下方法,但从未调用过 WebErrorEvent:

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

这是从该控件获取 javascript 错误反馈的正确方法吗?

4

1 回答 1

0

setOnError侦听器仅在加载给定文档时适用于错误。

解决此问题的一种方法是在被调用时调用 Java 方法console.log。你可以这样做。

您的外汇应用程序

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>

希望这个对你有帮助。

于 2017-05-06T05:45:29.013 回答