Что такое общедоступный API для получения событий консоли JavaFX WebView? - PullRequest
1 голос
/ 09 марта 2019

Я хочу регистрировать события консоли WebView.Иногда они обнаруживают причуды в используемом базовом браузере и могут помочь в устранении неполадок.

Для взаимодействия с консолью WebView можно использовать класс реализации Sun:

import 

//...

WebConsoleListener.setDefaultListener((webView, message, lineNumber, sourceId) ->
         LOGGER.info(() -> "WebConsoleListener: " + message + "[" + webEngine.getLocation() + ":" + lineNumber + "]")
);

Однако com.sun.javafx.webkit.WebConsoleListener , является классом реализации и не является частью открытого API JavaFX.

Что такое публичный API для получения событий консоли JavaFX WebView?

В качестве альтернативы, как правильно получить эти события для устранения неполадок?

1 Ответ

2 голосов
/ 10 марта 2019

Вы можете включить ведение журнала консоли браузера с помощью основных средств ведения журнала платформы Java ™ 2, добавив это в logging.properties:

com.sun.webkit.WebPage.level = FINE

Убедитесь, что в конфигурации ведения журнала присутствует обработчик журнала с FINE или более низким уровнем, иначе журналы будут отфильтрованы до их регистрации. Пример:

handlers = java.util.logging.ConsoleHandler
.level = INFO
java.util.logging.ConsoleHandler.level = ALL
java.util.logging.ConsoleHandler.formatter = java.util.logging.XMLFormatter

com.sun.webkit.WebPage.level = FINE

Вот более подробное объяснение того, как я это понял:

  1. WebConsoleListener # setDefaultListener (WebConsoleListener) вызывает WebPageClientImpl # setConsoleListener (WebConsoleListener) .

  2. WebPageClientImpl # setConsoleListener (WebConsoleListener) сохраняет прослушиватель в своем статическом поле consoleListener .

  3. consoleListener взаимодействует только с WebPageClientImpl # addMessageToConsole (String, int, String) .

  4. WebPageClientImpl # addMessageToConsole (String, int, String) переопределяет WebPageClient # addMessageToConsole (String, int, String) .

  5. WebPageClient # addMessageToConsole (String, int, String) is вызывается WebPage # fwkAddMessageToConsole (String, int, String) . Есть на момент написания этой статьи никаких других сайтов вызовов в базе кодов .

Тот же метод регистрирует информацию консоли:

log.log(Level.FINE, "fwkAddMessageToConsole(): message = " + message
                + ", lineNumber = " + lineNumber + ", sourceId = " + sourceId);

Это означает, что вы можете получить необходимое журналирование, включив FINE вход в систему com.sun.webkit.WebPage ограничение зависимости уровня реализации от конфигурации журналирования:

com.sun.webkit.WebPage.level = FINE

Мне не удалось найти общедоступный API для этого.

Основываясь на моем обзоре исходного репозитория OpenJDK JFX, для этого нет общедоступного API.

Это решение все еще не является идеальным, поскольку оно зависит от частного имени класса реализации, но эта зависимость находится в файле конфигурации, где, если класс реализации изменяется или исчезает, результатом является потеря журналирования, а не вероятная фатальная ошибка NoClassDefFoundError или NoSuchMethodError .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...