代码之家  ›  专栏  ›  技术社区  ›  Alain O'Dea

获取javafx webview控制台事件的公共api是什么?

  •  1
  • Alain O'Dea  · 技术社区  · 6 年前

    我想记录webview控制台事件。它们有时会在所使用的底层浏览器中发现一些怪癖,并有助于排除故障。

    可以使用Sun实现类与WebView控制台交互:

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

    然而, com.sun.javafx.webkit.webconsolelistener网站 ,是一个实现类,不是javafx公共api的一部分。

    获取javafx webview控制台事件的公共api是什么?

    或者,如何正确地获取这些事件以进行故障排除?

    0 回复  |  直到 6 年前
        1
  •  2
  •   Alain O'Dea    6 年前

    通过添加到LoggIng.Field:可以通过Java Author 2平台的核心日志记录工具启用浏览器控制台日志记录:

    com.sun.webkit.WebPage.level = 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设置控制台侦听器(WebConsoleListener) .

    2. WebPageClientImpl设置控制台侦听器(WebConsoleListener) 将侦听器存储在其静态字段中 固结仪 .

    3. 固结仪 只与 WebPageClientImpl添加消息到控制台(字符串、int、string) .

    4. WebPageClientImpl添加消息到控制台(字符串、int、string) 重写 webpageclient addMessageToConsole(字符串、int、string) .

    5. webpageclient addMessageToConsole(字符串、int、string) called by WebPage#fwkAddMessageToConsole(String,int,String) . no other call sites in the code base at the time of this writing .

    该方法记录控制台信息:

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

    这意味着您可以通过启用 好的 登录 网址:com.sun.webkit.webpage 将实现级别依赖性限制为日志配置:

    com.sun.webkit.webpage.level=很好
    

    我找不到这个的公共api。

    根据我对openjkjfx回购源代码的回顾,目前还没有一个用于此的公共api。

    此解决方案仍然不理想,因为它依赖于私有实现类名,但该依赖关系位于配置文件中,如果实现类更改或消失,则影响是日志记录丢失,而不是可能致命的NoClassDefFounderror或NoSuchMethoderror。