외부 파비콘을 faviconV2 origin 방식으로 수정해 서브도메인 아이콘이 올바르게 표시되도록 한다.
uniare.sori.studio처럼 domain 기반 API가 기본 지구본만 반환하던 문제를 해결하고, Recommended 썸네일 실패 fallback을 추가한다. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -1,10 +1,11 @@
|
||||
/**
|
||||
* 외부 사이트 파비콘을 브라우저에 표시하기 위한 프록시 URL을 만든다.
|
||||
* 호스트만 추출해 Google Favicon 서비스(`https://www.google.com/s2/favicons`) URL을 반환한다.
|
||||
* Google Favicon V2(`gstatic.com/faviconV2`)에 페이지 origin을 넘겨 파비콘을 받는다.
|
||||
* `s2/favicons?domain=`만 쓰면 일부 서브도메인·신규 사이트에서 기본 지구본만 돌아올 수 있다.
|
||||
* 내부 경로(`/…`)·`#`·파싱 실패 시 빈 문자열을 반환한다(이미지 생략).
|
||||
* @param {string} rawUrl - 링크 URL
|
||||
* @param {number} [sizePx] - 한 변(px), 기본 32, 최대 128
|
||||
* @returns {string} `https://www.google.com/s2/favicons?...` 또는 `''`
|
||||
* @returns {string} `https://t3.gstatic.com/faviconV2?...` 또는 `''`
|
||||
*/
|
||||
export const getExternalFaviconUrl = (rawUrl, sizePx = 32) => {
|
||||
const trimmed = String(rawUrl || '').trim()
|
||||
@@ -20,12 +21,18 @@ export const getExternalFaviconUrl = (rawUrl, sizePx = 32) => {
|
||||
if (u.protocol !== 'http:' && u.protocol !== 'https:') {
|
||||
return ''
|
||||
}
|
||||
const host = u.hostname
|
||||
if (!host) {
|
||||
if (!u.hostname) {
|
||||
return ''
|
||||
}
|
||||
const sz = Number.isFinite(sizePx) && sizePx > 0 ? Math.min(128, Math.round(sizePx)) : 32
|
||||
return `https://www.google.com/s2/favicons?domain=${encodeURIComponent(host)}&sz=${sz}`
|
||||
const params = new URLSearchParams({
|
||||
client: 'SOCIAL',
|
||||
type: 'FAVICON',
|
||||
fallback_opts: 'TYPE,SIZE,URL',
|
||||
url: u.origin,
|
||||
size: String(sz)
|
||||
})
|
||||
return `https://t3.gstatic.com/faviconV2?${params.toString()}`
|
||||
} catch {
|
||||
return ''
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user