diff --git a/index.html b/index.html
index 68c03e1..4ccd687 100644
--- a/index.html
+++ b/index.html
@@ -523,14 +523,35 @@
const isNcue = host === "ncue.net" || host.endsWith(".ncue.net");
const parts = uu.pathname.split("/").filter(Boolean);
const rootFav = `${uu.origin}/favicon.ico`;
- const hintPath = host === "mail.ncue.net" ? "/roundcube/favicon.ico" : "";
- const hintFav = hintPath ? `${uu.origin}${hintPath}` : "";
+ const candidates = [];
+ if (host === "mail.ncue.net") {
+ candidates.push(
+ `${uu.origin}/roundcube/skins/elastic/images/favicon.ico`,
+ `${uu.origin}/roundcube/skins/larry/images/favicon.ico`,
+ `${uu.origin}/roundcube/skins/classic/images/favicon.ico`,
+ `${uu.origin}/skins/elastic/images/favicon.ico`,
+ `${uu.origin}/skins/larry/images/favicon.ico`,
+ `${uu.origin}/skins/classic/images/favicon.ico`,
+ `${uu.origin}/roundcube/favicon.ico`
+ );
+ }
const pathFav = isNcue && parts.length ? `${uu.origin}/${parts[0]}/favicon.ico` : "";
- const primary = pathFav || hintFav || rootFav;
- const fallback = primary !== rootFav ? rootFav : "";
- return { primary, fallback };
+ const list = [];
+ if (pathFav) list.push(pathFav);
+ list.push(...candidates);
+ list.push(rootFav);
+ const uniq = [];
+ const seen = new Set();
+ for (const x of list) {
+ const v = String(x || "").trim();
+ if (!v) continue;
+ if (seen.has(v)) continue;
+ seen.add(v);
+ uniq.push(v);
+ }
+ return { primary: uniq[0] || "", fallbackList: uniq.slice(1) };
} catch {
- return { primary: "", fallback: "" };
+ return { primary: "", fallbackList: [] };
}
}
function buildOpenUrl(rawUrl) {
@@ -558,13 +579,13 @@
const copyAttrs = accessible ? "" : ` disabled aria-disabled="true" title="이 링크는 현재 권한으로 접근할 수 없습니다."`;
const fav = faviconCandidates(link.url);
const faviconHtml = fav && fav.primary
- ? ``
+ ? `
`
: `