获取JavaFXWebView控制台事件的公共API是什么?

获取JavaFXWebView控制台事件的公共API是什么?,java,javafx,Java,Javafx,我想记录WebView控制台事件。他们有时会在所使用的底层浏览器中发现一些怪癖,并帮助进行故障排除 可以使用Sun实现类与WebView控制台交互: 导入 //... WebConsoleListener.setDefaultListener((webView、消息、行号、源ID)-> LOGGER.info(()->“WebConsoleListener:“+message+”[“+webEngine.getLocation()+”:“+lineNumber+”])) ); 但是,com.s

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

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

导入
//...
WebConsoleListener.setDefaultListener((webView、消息、行号、源ID)->
LOGGER.info(()->“WebConsoleListener:“+message+”[“+webEngine.getLocation()+”:“+lineNumber+”]))
);
但是,com.sun.javafx.webkit.WebConsoleListener是一个实现类,而不是javafx公共API的一部分

获取JavaFXWebView控制台事件的公共API是什么


或者,获取这些事件以进行故障排除的正确方法是什么?

您可以通过Java启用浏览器控制台日志记录™ 2通过将其添加到logging.properties,平台的核心日志记录设施:

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
下面是我如何得出这一结论的更深入解释:

  • WebConsoleListener\setDefaultListener(WebConsoleListener)调用WebPageClientImpl\setConsoleListener(WebConsoleListener)

  • WebPageClientImpl#setConsoleListener(WebConsoleListener)将侦听器存储在其静态字段中consoleListener

  • consoleListener仅通过WebPageClientImpl#addMessageToConsole(String,int,String)与之交互

  • WebPageClientImpl#addMessageToConsole(String,int,String)覆盖WebPageClient#addMessageToConsole(String,int,String)

  • WebPageClient#addMessageToConsole(String,int,String)

  • 该方法记录控制台信息:

    log.log(Level.FINE,“fwkAddMessageToConsole():message=“+message
    +“,lineNumber=“+lineNumber+”,sourceId=“+sourceId”);
    
    这意味着您可以通过启用com.sun.webkit.WebPage上的FINE来获得所需的日志记录,将实现级别依赖项限制为日志记录配置:

    com.sun.webkit.WebPage.level = FINE
    
    我找不到用于此的公共API

    根据我对OpenJDK JFX repo源代码的回顾,没有一个用于此的公共API


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

    哪个版本的OpenJDK?@JasonS自2014年初8u5-b01以来,所有版本的OpenJDK都出现了这种情况。你为什么要问?我试过了,但由于某种原因无法发出
    com.sun.webkit.WebPage
    log事件。但我在NetBeans派生版本的插件中使用它,所以谁知道发生了什么。我放弃了。是的,上面的案例是在一个已经被配置用于日志记录的应用程序的中间。您可能需要了解NetBeans或其插件如何公开日志记录。我猜他们会直接使用JUL进行日志记录,但根据您的经验,它可能会以某种方式进行定制。