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'。 –