3

私が知る限り、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) }
            }
        }
    }
    // ...
}
4

1 に答える 1