2
据我所知,没有在JxBrowser的favicons基础设施。该图标不应该成为冠军赛的一部分吗?我想我最好的选择是去http://<domain>/favicon.ico
,但这将是非常多余的工作(http客户端和缓存机制)。JxBrowser策略有效地检索favicon
有没有什么办法可以使用JxBrowser来优雅地照顾这件事?
我已经尝试了两种策略,试图可靠地获得资源的保持,这是不够可靠,但:
事件基于URL采集(ResourceType.FAVICON
是从未见过):
browser.context.networkService.resourceHandler = object : ResourceHandler {
override fun canLoadResource(p0: ResourceParams?): Boolean {
if (p0!!.resourceType == ResourceType.FAVICON) println(p0!!.url)
if (p0!!.resourceType == ResourceType.IMAGE && p0.url.contains("favicon")) println("found favicon url: ${p0.url}")
return true
}
}
//基于xpath的方法
browser.addLoadListener(object : LoadListener {
override fun onDocumentLoadedInMainFrame(p0: LoadEvent) {
p0.inSwingThread {
val res = it.browser.document.findElements(By.xpath("//link[@rel=\"icon\" or @rel=\"shortcut icon\"]"))
res.forEach {
println("----------")
it.attributes.forEach { println(it.key + " " + it.value) }
}
}
}
// ...
}
您可能希望在第一个代码块中的if条件后面插入换行符(我不熟悉语法,因此我不想以某种方式中断代码)。在我的计算机上,如果有条件的话,第二个条件之后的代码不能被看到,除非你向右滚动,如果条件为真,看起来好像你想'返回true'。 –