私が知る限り、JxBrowser にはファビコンのインフラストラクチャはありません。ファビコンはタイトルイベントの一部であるべきではありませんか? 私の最善の策はただ行くことだと思いますhttp://<domain>/favicon.ico
が、これは非常に冗長な作業になります(httpクライアントとキャッシュメカニズム)。
JxBrowser を使用してこれをエレガントに処理する方法はありますか?
リソースを確実に取得するために 2 つの戦略を試しましたが、十分な信頼性はありません。
イベント ベースの 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) }
}
}
}
// ...
}