From 206a33419b53c12ef9b9aa752dcdbcc03a4bb482 Mon Sep 17 00:00:00 2001 From: cyfung1031 <44498510+cyfung1031@users.noreply.github.com> Date: Sun, 5 Apr 2026 18:27:52 +0900 Subject: [PATCH 1/5] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=9B=9B=E4=B8=AA?= =?UTF-8?q?=E5=9B=BE=E6=A0=87=E6=9C=8D=E5=8A=A1=E4=BE=9B=E5=BA=94=E5=95=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/locales/de-DE/translation.json | 6 +++++- src/locales/en-US/translation.json | 6 +++++- src/locales/ja-JP/translation.json | 6 +++++- src/locales/ru-RU/translation.json | 6 +++++- src/locales/vi-VN/translation.json | 6 +++++- src/locales/zh-CN/translation.json | 6 +++++- src/locales/zh-TW/translation.json | 6 +++++- src/pages/options/routes/Setting.tsx | 4 ++++ src/pages/store/favicons.ts | 8 ++++++++ src/pkg/config/config.ts | 2 +- 10 files changed, 48 insertions(+), 8 deletions(-) diff --git a/src/locales/de-DE/translation.json b/src/locales/de-DE/translation.json index 2140ba9b8..cce2d44cd 100644 --- a/src/locales/de-DE/translation.json +++ b/src/locales/de-DE/translation.json @@ -598,8 +598,12 @@ "favicon_service": "Favicon-Dienst", "favicon_service_desc": "Dienst zum Abrufen von Website-Symbolen auswählen", "favicon_service_scriptcat": "ScriptCat", - "favicon_service_local": "Lokal abrufen", "favicon_service_google": "Google", + "favicon_service_duckduckgo": "DuckDuckGo", + "favicon_service_favicone": "Favicone", + "favicon_service_icon-horse": "Icon Horse", + "favicon_service_baidu": "Baidu", + "favicon_service_local": "Lokal abrufen", "editor": { "show_script_list": "Skriptliste anzeigen", "hide_script_list": "Skriptliste ausblenden" diff --git a/src/locales/en-US/translation.json b/src/locales/en-US/translation.json index c4546e631..ac7108ef3 100644 --- a/src/locales/en-US/translation.json +++ b/src/locales/en-US/translation.json @@ -598,8 +598,12 @@ "favicon_service": "Favicon Service", "favicon_service_desc": "Choose the service for fetching website icons", "favicon_service_scriptcat": "ScriptCat", - "favicon_service_local": "Local Fetch", "favicon_service_google": "Google", + "favicon_service_duckduckgo": "DuckDuckGo", + "favicon_service_favicone": "Favicone", + "favicon_service_icon-horse": "Icon Horse", + "favicon_service_baidu": "Baidu", + "favicon_service_local": "Local Fetch", "editor": { "show_script_list": "Show Script List", "hide_script_list": "Hide Script List" diff --git a/src/locales/ja-JP/translation.json b/src/locales/ja-JP/translation.json index 15da6c833..6e5e22277 100644 --- a/src/locales/ja-JP/translation.json +++ b/src/locales/ja-JP/translation.json @@ -598,8 +598,12 @@ "favicon_service": "Favicon サービス", "favicon_service_desc": "ウェブサイトアイコンの取得サービスを選択", "favicon_service_scriptcat": "ScriptCat", - "favicon_service_local": "ローカル取得", "favicon_service_google": "Google", + "favicon_service_duckduckgo": "DuckDuckGo", + "favicon_service_favicone": "Favicone", + "favicon_service_icon-horse": "Icon Horse", + "favicon_service_baidu": "Baidu", + "favicon_service_local": "ローカル取得", "editor": { "show_script_list": "スクリプトリストを表示", "hide_script_list": "スクリプトリストを非表示" diff --git a/src/locales/ru-RU/translation.json b/src/locales/ru-RU/translation.json index dde675983..ec4303bf1 100644 --- a/src/locales/ru-RU/translation.json +++ b/src/locales/ru-RU/translation.json @@ -598,8 +598,12 @@ "favicon_service": "Сервис Favicon", "favicon_service_desc": "Выберите сервис для получения значков сайтов", "favicon_service_scriptcat": "ScriptCat", - "favicon_service_local": "Локальное получение", "favicon_service_google": "Google", + "favicon_service_duckduckgo": "DuckDuckGo", + "favicon_service_favicone": "Favicone", + "favicon_service_icon-horse": "Icon Horse", + "favicon_service_baidu": "Baidu", + "favicon_service_local": "Локальное получение", "editor": { "show_script_list": "Показать список скриптов", "hide_script_list": "Скрыть список скриптов" diff --git a/src/locales/vi-VN/translation.json b/src/locales/vi-VN/translation.json index 82ba4fa8d..69150fba7 100644 --- a/src/locales/vi-VN/translation.json +++ b/src/locales/vi-VN/translation.json @@ -598,8 +598,12 @@ "favicon_service": "Dịch vụ Favicon", "favicon_service_desc": "Chọn dịch vụ để lấy biểu tượng trang web", "favicon_service_scriptcat": "ScriptCat", - "favicon_service_local": "Lấy cục bộ", "favicon_service_google": "Google", + "favicon_service_duckduckgo": "DuckDuckGo", + "favicon_service_favicone": "Favicone", + "favicon_service_icon-horse": "Icon Horse", + "favicon_service_baidu": "Baidu", + "favicon_service_local": "Lấy cục bộ", "editor": { "show_script_list": "Hiển thị danh sách script", "hide_script_list": "Ẩn danh sách script" diff --git a/src/locales/zh-CN/translation.json b/src/locales/zh-CN/translation.json index 1dc717a82..ae8af8af9 100644 --- a/src/locales/zh-CN/translation.json +++ b/src/locales/zh-CN/translation.json @@ -598,8 +598,12 @@ "favicon_service": "图标服务", "favicon_service_desc": "选择获取网站图标的服务", "favicon_service_scriptcat": "ScriptCat", - "favicon_service_local": "本地获取", "favicon_service_google": "Google", + "favicon_service_duckduckgo": "DuckDuckGo", + "favicon_service_favicone": "Favicone", + "favicon_service_icon-horse": "Icon Horse", + "favicon_service_baidu": "百度 (Baidu)", + "favicon_service_local": "本地获取", "editor": { "show_script_list": "显示脚本列表", "hide_script_list": "隐藏脚本列表" diff --git a/src/locales/zh-TW/translation.json b/src/locales/zh-TW/translation.json index 4480a1c12..ac9887e78 100644 --- a/src/locales/zh-TW/translation.json +++ b/src/locales/zh-TW/translation.json @@ -598,8 +598,12 @@ "favicon_service": "圖示服務", "favicon_service_desc": "選擇取得網站圖示的服務", "favicon_service_scriptcat": "ScriptCat", - "favicon_service_local": "本地取得", "favicon_service_google": "Google", + "favicon_service_duckduckgo": "DuckDuckGo", + "favicon_service_favicone": "Favicone", + "favicon_service_icon-horse": "Icon Horse", + "favicon_service_baidu": "百度 (Baidu)", + "favicon_service_local": "本地取得", "editor": { "show_script_list": "顯示腳本列表", "hide_script_list": "隱藏腳本列表" diff --git a/src/pages/options/routes/Setting.tsx b/src/pages/options/routes/Setting.tsx index 0ac87c935..7f5caac4f 100644 --- a/src/pages/options/routes/Setting.tsx +++ b/src/pages/options/routes/Setting.tsx @@ -338,6 +338,10 @@ function Setting() { > {t("favicon_service_scriptcat")} {t("favicon_service_google")} + {t("favicon_service_duckduckgo")} + {t("favicon_service_favicone")} + {t("favicon_service_icon-horse")} + {t("favicon_service_baidu")} {t("favicon_service_local")} diff --git a/src/pages/store/favicons.ts b/src/pages/store/favicons.ts index feb2da4df..5697a7d4a 100644 --- a/src/pages/store/favicons.ts +++ b/src/pages/store/favicons.ts @@ -203,6 +203,14 @@ export async function fetchIconByService(domain: string, service: FaviconService return [`https://ext.scriptcat.org/api/v1/open/favicons?domain=${encodeURIComponent(domain)}&sz=64`]; case "google": return [`https://www.google.com/s2/favicons?domain=${encodeURIComponent(domain)}&sz=64`]; + case "duckduckgo": + return [`https://icons.duckduckgo.com/ip3/${encodeURI(domain)}.ico`]; + case "favicone": + return [`https://favicone.com/${encodeURI(domain)}?s=64`]; + case "icon-horse": + return [`https://icon.horse/icon/${encodeURI(domain)}`]; + case "baidu": + return [`https://www.baidu.com/favicon.ico?url=${encodeURIComponent(domain)}`]; case "local": default: return await fetchIconByDomain(domain); diff --git a/src/pkg/config/config.ts b/src/pkg/config/config.ts index b569c7284..be60e3167 100644 --- a/src/pkg/config/config.ts +++ b/src/pkg/config/config.ts @@ -20,7 +20,7 @@ export type CloudSyncConfig = { params: { [key: string]: any }; }; -export type FaviconService = "scriptcat" | "local" | "google"; +export type FaviconService = "scriptcat" | "google" | "duckduckgo" | "favicone" | "icon-horse" | "baidu" | "local"; export type CATFileStorage = { filesystem: FileSystemType; From ad33fea7fcdaece2a8752374e21bc4aa62900e88 Mon Sep 17 00:00:00 2001 From: cyfung1031 <44498510+cyfung1031@users.noreply.github.com> Date: Sun, 5 Apr 2026 18:45:10 +0900 Subject: [PATCH 2/5] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E4=BA=94=E4=B8=AA?= =?UTF-8?q?=E5=9B=BE=E6=A0=87=E6=9C=8D=E5=8A=A1=E4=BE=9B=E5=BA=94=E5=95=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/locales/de-DE/translation.json | 5 +++++ src/locales/en-US/translation.json | 5 +++++ src/locales/ja-JP/translation.json | 5 +++++ src/locales/ru-RU/translation.json | 5 +++++ src/locales/vi-VN/translation.json | 5 +++++ src/locales/zh-CN/translation.json | 5 +++++ src/locales/zh-TW/translation.json | 5 +++++ src/pages/options/routes/Setting.tsx | 5 +++++ src/pages/store/favicons.ts | 10 ++++++++++ src/pkg/config/config.ts | 14 +++++++++++++- 10 files changed, 63 insertions(+), 1 deletion(-) diff --git a/src/locales/de-DE/translation.json b/src/locales/de-DE/translation.json index cce2d44cd..5baf9396f 100644 --- a/src/locales/de-DE/translation.json +++ b/src/locales/de-DE/translation.json @@ -603,6 +603,11 @@ "favicon_service_favicone": "Favicone", "favicon_service_icon-horse": "Icon Horse", "favicon_service_baidu": "Baidu", + "favicon_service_favicon_im": "Favicon.im", + "favicon_service_vemetric": "Vemetric", + "favicon_service_yandex": "Yandex", + "favicon_service_allesedv": "Allesedv", + "favicon_service_manifest_im": "Manifest.im", "favicon_service_local": "Lokal abrufen", "editor": { "show_script_list": "Skriptliste anzeigen", diff --git a/src/locales/en-US/translation.json b/src/locales/en-US/translation.json index ac7108ef3..2c31d7d63 100644 --- a/src/locales/en-US/translation.json +++ b/src/locales/en-US/translation.json @@ -603,6 +603,11 @@ "favicon_service_favicone": "Favicone", "favicon_service_icon-horse": "Icon Horse", "favicon_service_baidu": "Baidu", + "favicon_service_favicon_im": "Favicon.im", + "favicon_service_vemetric": "Vemetric", + "favicon_service_yandex": "Yandex", + "favicon_service_allesedv": "Allesedv", + "favicon_service_manifest_im": "Manifest.im", "favicon_service_local": "Local Fetch", "editor": { "show_script_list": "Show Script List", diff --git a/src/locales/ja-JP/translation.json b/src/locales/ja-JP/translation.json index 6e5e22277..25d112fe4 100644 --- a/src/locales/ja-JP/translation.json +++ b/src/locales/ja-JP/translation.json @@ -603,6 +603,11 @@ "favicon_service_favicone": "Favicone", "favicon_service_icon-horse": "Icon Horse", "favicon_service_baidu": "Baidu", + "favicon_service_favicon_im": "Favicon.im", + "favicon_service_vemetric": "Vemetric", + "favicon_service_yandex": "Yandex", + "favicon_service_allesedv": "Allesedv", + "favicon_service_manifest_im": "Manifest.im", "favicon_service_local": "ローカル取得", "editor": { "show_script_list": "スクリプトリストを表示", diff --git a/src/locales/ru-RU/translation.json b/src/locales/ru-RU/translation.json index ec4303bf1..7777a0c16 100644 --- a/src/locales/ru-RU/translation.json +++ b/src/locales/ru-RU/translation.json @@ -603,6 +603,11 @@ "favicon_service_favicone": "Favicone", "favicon_service_icon-horse": "Icon Horse", "favicon_service_baidu": "Baidu", + "favicon_service_favicon_im": "Favicon.im", + "favicon_service_vemetric": "Vemetric", + "favicon_service_yandex": "Yandex", + "favicon_service_allesedv": "Allesedv", + "favicon_service_manifest_im": "Manifest.im", "favicon_service_local": "Локальное получение", "editor": { "show_script_list": "Показать список скриптов", diff --git a/src/locales/vi-VN/translation.json b/src/locales/vi-VN/translation.json index 69150fba7..a86a1c8d6 100644 --- a/src/locales/vi-VN/translation.json +++ b/src/locales/vi-VN/translation.json @@ -603,6 +603,11 @@ "favicon_service_favicone": "Favicone", "favicon_service_icon-horse": "Icon Horse", "favicon_service_baidu": "Baidu", + "favicon_service_favicon_im": "Favicon.im", + "favicon_service_vemetric": "Vemetric", + "favicon_service_yandex": "Yandex", + "favicon_service_allesedv": "Allesedv", + "favicon_service_manifest_im": "Manifest.im", "favicon_service_local": "Lấy cục bộ", "editor": { "show_script_list": "Hiển thị danh sách script", diff --git a/src/locales/zh-CN/translation.json b/src/locales/zh-CN/translation.json index ae8af8af9..42f1d3994 100644 --- a/src/locales/zh-CN/translation.json +++ b/src/locales/zh-CN/translation.json @@ -603,6 +603,11 @@ "favicon_service_favicone": "Favicone", "favicon_service_icon-horse": "Icon Horse", "favicon_service_baidu": "百度 (Baidu)", + "favicon_service_favicon_im": "Favicon.im", + "favicon_service_vemetric": "Vemetric", + "favicon_service_yandex": "Yandex", + "favicon_service_allesedv": "Allesedv", + "favicon_service_manifest_im": "Manifest.im", "favicon_service_local": "本地获取", "editor": { "show_script_list": "显示脚本列表", diff --git a/src/locales/zh-TW/translation.json b/src/locales/zh-TW/translation.json index ac9887e78..bd80dab35 100644 --- a/src/locales/zh-TW/translation.json +++ b/src/locales/zh-TW/translation.json @@ -603,6 +603,11 @@ "favicon_service_favicone": "Favicone", "favicon_service_icon-horse": "Icon Horse", "favicon_service_baidu": "百度 (Baidu)", + "favicon_service_favicon_im": "Favicon.im", + "favicon_service_vemetric": "Vemetric", + "favicon_service_yandex": "Yandex", + "favicon_service_allesedv": "Allesedv", + "favicon_service_manifest_im": "Manifest.im", "favicon_service_local": "本地取得", "editor": { "show_script_list": "顯示腳本列表", diff --git a/src/pages/options/routes/Setting.tsx b/src/pages/options/routes/Setting.tsx index 7f5caac4f..fbe5bc085 100644 --- a/src/pages/options/routes/Setting.tsx +++ b/src/pages/options/routes/Setting.tsx @@ -342,6 +342,11 @@ function Setting() { {t("favicon_service_favicone")} {t("favicon_service_icon-horse")} {t("favicon_service_baidu")} + {t("favicon_service_favicon_im")} + {t("favicon_service_vemetric")} + {t("favicon_service_yandex")} + {t("favicon_service_allesedv")} + {t("favicon_service_manifest_im")} {t("favicon_service_local")} diff --git a/src/pages/store/favicons.ts b/src/pages/store/favicons.ts index 5697a7d4a..44fb43ea9 100644 --- a/src/pages/store/favicons.ts +++ b/src/pages/store/favicons.ts @@ -211,6 +211,16 @@ export async function fetchIconByService(domain: string, service: FaviconService return [`https://icon.horse/icon/${encodeURI(domain)}`]; case "baidu": return [`https://www.baidu.com/favicon.ico?url=${encodeURIComponent(domain)}`]; + case "favicon.im": + return [`https://favicon.im/${encodeURI(domain)}`]; + case "vemetric": + return [`https://favicon.vemetric.com/${encodeURI(domain)}?size=64`]; // 特殊圖標 + case "yandex": + return [`https://favicon.yandex.net/favicon/${encodeURI(domain)}`]; // 只有16x16 + case "allesedv": + return [`https://f1.allesedv.com/16/${encodeURI(domain)}`]; + case "manifest.im": + return [`https://manifest.im/icon/${encodeURI(domain)}`]; case "local": default: return await fetchIconByDomain(domain); diff --git a/src/pkg/config/config.ts b/src/pkg/config/config.ts index be60e3167..9b765183d 100644 --- a/src/pkg/config/config.ts +++ b/src/pkg/config/config.ts @@ -20,7 +20,19 @@ export type CloudSyncConfig = { params: { [key: string]: any }; }; -export type FaviconService = "scriptcat" | "google" | "duckduckgo" | "favicone" | "icon-horse" | "baidu" | "local"; +export type FaviconService = + | "scriptcat" + | "google" + | "duckduckgo" + | "favicone" + | "icon-horse" + | "baidu" + | "favicon.im" + | "vemetric" + | "yandex" + | "allesedv" + | "manifest.im" + | "local"; export type CATFileStorage = { filesystem: FileSystemType; From 4c8cbfd97b11df97d6558b09719eff8c084af9e2 Mon Sep 17 00:00:00 2001 From: cyfung1031 <44498510+cyfung1031@users.noreply.github.com> Date: Sun, 5 Apr 2026 18:50:15 +0900 Subject: [PATCH 3/5] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E8=AF=B4=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/store/favicons.ts | 125 +++++++++++++++++++++++++++++++++++- 1 file changed, 123 insertions(+), 2 deletions(-) diff --git a/src/pages/store/favicons.ts b/src/pages/store/favicons.ts index 44fb43ea9..3455b69c0 100644 --- a/src/pages/store/favicons.ts +++ b/src/pages/store/favicons.ts @@ -195,34 +195,155 @@ export async function fetchIconByDomain(domain: string): Promise { } /** - * 根据服务类型获取favicon URL列表 + * 根据服务类型获取 favicon URL 列表 + * + * 各服务说明(包含尺寸、限制、收费、国内可用性等): */ export async function fetchIconByService(domain: string, service: FaviconService): Promise { switch (service) { case "scriptcat": + /** + * ScriptCat 图标服务 + * - 尺寸:支持 sz 参数(如 16 / 32 / 64 / 128) + * - 限制:暂无公开限流说明,小规模使用稳定 + * - 收费:免费 + * - 中国访问:✅ 国内可正常访问(国内服务) + * - 缓存:可长期缓存(返回稳定) + * - 特点:适合国内项目,速度快 + */ return [`https://ext.scriptcat.org/api/v1/open/favicons?domain=${encodeURIComponent(domain)}&sz=64`]; + case "google": + /** + * Google S2 Favicon 服务 + * - 尺寸:支持 sz=16~256(常用 16/32/64) + * - 限制:无官方文档,存在隐性限流 + * - 收费:免费 + * - 中国访问:⚠️ 基本不可用 + * - 缓存:强烈建议缓存(避免请求失败) + * - 特点:质量高,命中率高 + */ return [`https://www.google.com/s2/favicons?domain=${encodeURIComponent(domain)}&sz=64`]; + case "duckduckgo": + /** + * DuckDuckGo 图标服务 + * - 尺寸:固定(通常 64x64 或 ico 原始尺寸) + * - 限制:无官方说明 + * - 收费:免费 + * - 中国访问:⚠️ 不稳定 / 偶尔失败 + * - 缓存:建议缓存 + * - 特点:简单直接,返回 ico + */ return [`https://icons.duckduckgo.com/ip3/${encodeURI(domain)}.ico`]; + case "favicone": + /** + * Favicone.com + * - 尺寸:支持 s 参数(如 16 / 32 / 64) + * - 限制:可能存在频率限制 + * - 收费:免费(无官方 SLA) + * - 中国访问:⚠️ 不稳定 + * - 缓存:建议缓存 + * - 特点:返回 png,适合前端展示 + */ return [`https://favicone.com/${encodeURI(domain)}?s=64`]; + case "icon-horse": + /** + * Icon Horse + * - 尺寸:自动适配(返回较高清 png) + * - 限制:未公开限流策略 + * - 收费:免费(轻量使用) + * - 中国访问:⚠️ 较慢或不稳定 + * - 缓存:建议缓存 + * - 特点:质量较好,支持 fallback + */ return [`https://icon.horse/icon/${encodeURI(domain)}`]; + case "baidu": + /** + * 百度 favicon 服务 + * - 尺寸:固定(通常 16x16 或站点原始) + * - 限制:无文档,但较稳定 + * - 收费:免费 + * - 中国访问:✅ 非常稳定 + * - 缓存:可缓存 + * - 特点:国内最佳 fallback 之一 + */ return [`https://www.baidu.com/favicon.ico?url=${encodeURIComponent(domain)}`]; + case "favicon.im": + /** + * favicon.im + * - 尺寸:自动获取(通常较清晰) + * - 限制:未知 + * - 收费:免费 + * - 中国访问:⚠️ 不稳定 + * - 缓存:建议缓存 + * - 特点:接口简单 + */ return [`https://favicon.im/${encodeURI(domain)}`]; + case "vemetric": - return [`https://favicon.vemetric.com/${encodeURI(domain)}?size=64`]; // 特殊圖標 + /** + * Vemetric favicon 服务 + * - 尺寸:支持 size 参数(如 32 / 64 / 128) + * - 限制:无公开说明 + * - 收费:免费 + * - 中国访问:⚠️ 可能较慢 + * - 缓存:建议缓存 + * - 特点:支持高清 favicon + */ + return [`https://favicon.vemetric.com/${encodeURI(domain)}?size=64`]; // 特殊图标 + case "yandex": + /** + * Yandex favicon + * - 尺寸:仅支持 16x16 + * - 限制:无公开文档 + * - 收费:免费 + * - 中国访问:⚠️ 不稳定 + * - 缓存:建议缓存 + * - 特点:俄罗斯搜索引擎,fallback 用 + */ return [`https://favicon.yandex.net/favicon/${encodeURI(domain)}`]; // 只有16x16 + case "allesedv": + /** + * Allesedv favicon + * - 尺寸:路径中指定(如 /16/) + * - 限制:未知 + * - 收费:免费 + * - 中国访问:⚠️ 一般 + * - 缓存:建议缓存 + * - 特点:简单备用服务 + */ return [`https://f1.allesedv.com/16/${encodeURI(domain)}`]; + case "manifest.im": + /** + * manifest.im + * - 尺寸:自动解析网站 manifest(可能返回较大图标) + * - 限制:依赖目标站点 + * - 收费:免费 + * - 中国访问:⚠️ 不稳定 + * - 缓存:建议缓存 + * - 特点:可获取 PWA 图标(质量高) + */ return [`https://manifest.im/icon/${encodeURI(domain)}`]; + case "local": default: + /** + * 本地解析 favicon + * - 尺寸:取决于网站(可能多尺寸) + * - 限制:需要自行实现抓取逻辑 + * - 收费:无(本地逻辑) + * - 中国访问:✅ 完全可控 + * - 缓存:强烈建议缓存 + * - 特点:最可靠但实现成本高 + */ return await fetchIconByDomain(domain); } } From fa5550272d557c4466659fe924186c850aceada3 Mon Sep 17 00:00:00 2001 From: cyfung1031 <44498510+cyfung1031@users.noreply.github.com> Date: Sun, 5 Apr 2026 19:05:52 +0900 Subject: [PATCH 4/5] =?UTF-8?q?=E7=A7=BB=E9=99=A4=20baidu?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/locales/de-DE/translation.json | 1 - src/locales/en-US/translation.json | 1 - src/locales/ja-JP/translation.json | 1 - src/locales/ru-RU/translation.json | 1 - src/locales/vi-VN/translation.json | 1 - src/pages/options/routes/Setting.tsx | 1 - src/pages/store/favicons.ts | 12 ------------ src/pkg/config/config.ts | 1 - 8 files changed, 19 deletions(-) diff --git a/src/locales/de-DE/translation.json b/src/locales/de-DE/translation.json index 5baf9396f..90d53b47f 100644 --- a/src/locales/de-DE/translation.json +++ b/src/locales/de-DE/translation.json @@ -602,7 +602,6 @@ "favicon_service_duckduckgo": "DuckDuckGo", "favicon_service_favicone": "Favicone", "favicon_service_icon-horse": "Icon Horse", - "favicon_service_baidu": "Baidu", "favicon_service_favicon_im": "Favicon.im", "favicon_service_vemetric": "Vemetric", "favicon_service_yandex": "Yandex", diff --git a/src/locales/en-US/translation.json b/src/locales/en-US/translation.json index 2c31d7d63..cc95cb0d7 100644 --- a/src/locales/en-US/translation.json +++ b/src/locales/en-US/translation.json @@ -602,7 +602,6 @@ "favicon_service_duckduckgo": "DuckDuckGo", "favicon_service_favicone": "Favicone", "favicon_service_icon-horse": "Icon Horse", - "favicon_service_baidu": "Baidu", "favicon_service_favicon_im": "Favicon.im", "favicon_service_vemetric": "Vemetric", "favicon_service_yandex": "Yandex", diff --git a/src/locales/ja-JP/translation.json b/src/locales/ja-JP/translation.json index 25d112fe4..dd0887221 100644 --- a/src/locales/ja-JP/translation.json +++ b/src/locales/ja-JP/translation.json @@ -602,7 +602,6 @@ "favicon_service_duckduckgo": "DuckDuckGo", "favicon_service_favicone": "Favicone", "favicon_service_icon-horse": "Icon Horse", - "favicon_service_baidu": "Baidu", "favicon_service_favicon_im": "Favicon.im", "favicon_service_vemetric": "Vemetric", "favicon_service_yandex": "Yandex", diff --git a/src/locales/ru-RU/translation.json b/src/locales/ru-RU/translation.json index 7777a0c16..3a9710c4a 100644 --- a/src/locales/ru-RU/translation.json +++ b/src/locales/ru-RU/translation.json @@ -602,7 +602,6 @@ "favicon_service_duckduckgo": "DuckDuckGo", "favicon_service_favicone": "Favicone", "favicon_service_icon-horse": "Icon Horse", - "favicon_service_baidu": "Baidu", "favicon_service_favicon_im": "Favicon.im", "favicon_service_vemetric": "Vemetric", "favicon_service_yandex": "Yandex", diff --git a/src/locales/vi-VN/translation.json b/src/locales/vi-VN/translation.json index a86a1c8d6..999becc8c 100644 --- a/src/locales/vi-VN/translation.json +++ b/src/locales/vi-VN/translation.json @@ -602,7 +602,6 @@ "favicon_service_duckduckgo": "DuckDuckGo", "favicon_service_favicone": "Favicone", "favicon_service_icon-horse": "Icon Horse", - "favicon_service_baidu": "Baidu", "favicon_service_favicon_im": "Favicon.im", "favicon_service_vemetric": "Vemetric", "favicon_service_yandex": "Yandex", diff --git a/src/pages/options/routes/Setting.tsx b/src/pages/options/routes/Setting.tsx index fbe5bc085..3b356a3b4 100644 --- a/src/pages/options/routes/Setting.tsx +++ b/src/pages/options/routes/Setting.tsx @@ -341,7 +341,6 @@ function Setting() { {t("favicon_service_duckduckgo")} {t("favicon_service_favicone")} {t("favicon_service_icon-horse")} - {t("favicon_service_baidu")} {t("favicon_service_favicon_im")} {t("favicon_service_vemetric")} {t("favicon_service_yandex")} diff --git a/src/pages/store/favicons.ts b/src/pages/store/favicons.ts index 3455b69c0..72ff2af19 100644 --- a/src/pages/store/favicons.ts +++ b/src/pages/store/favicons.ts @@ -261,18 +261,6 @@ export async function fetchIconByService(domain: string, service: FaviconService */ return [`https://icon.horse/icon/${encodeURI(domain)}`]; - case "baidu": - /** - * 百度 favicon 服务 - * - 尺寸:固定(通常 16x16 或站点原始) - * - 限制:无文档,但较稳定 - * - 收费:免费 - * - 中国访问:✅ 非常稳定 - * - 缓存:可缓存 - * - 特点:国内最佳 fallback 之一 - */ - return [`https://www.baidu.com/favicon.ico?url=${encodeURIComponent(domain)}`]; - case "favicon.im": /** * favicon.im diff --git a/src/pkg/config/config.ts b/src/pkg/config/config.ts index 9b765183d..46e51427b 100644 --- a/src/pkg/config/config.ts +++ b/src/pkg/config/config.ts @@ -26,7 +26,6 @@ export type FaviconService = | "duckduckgo" | "favicone" | "icon-horse" - | "baidu" | "favicon.im" | "vemetric" | "yandex" From 656586e06b841969320c0ed51a539bacb766fb30 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E4=B8=80=E4=B9=8B?= Date: Sun, 5 Apr 2026 19:15:42 +0800 Subject: [PATCH 5/5] =?UTF-8?q?=F0=9F=94=A5=20=E7=B2=BE=E7=AE=80=E5=9B=BE?= =?UTF-8?q?=E6=A0=87=E6=9C=8D=E5=8A=A1=EF=BC=8C=E5=8F=AA=E4=BF=9D=E7=95=99?= =?UTF-8?q?=205=20=E4=B8=AA=E6=A0=B8=E5=BF=83=E9=80=89=E9=A1=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 根据 PR 评论反馈,移除画质过差、同质化、不稳定的 6 个服务 (favicone, favicon.im, vemetric, yandex, allesedv, manifest.im), 只保留 scriptcat、google、duckduckgo、icon-horse、local 5 个核心选项, 让 UI 更清爽。同时清理 zh-CN/zh-TW 残留的 baidu 翻译键。 --- src/locales/de-DE/translation.json | 6 --- src/locales/en-US/translation.json | 6 --- src/locales/ja-JP/translation.json | 6 --- src/locales/ru-RU/translation.json | 6 --- src/locales/vi-VN/translation.json | 6 --- src/locales/zh-CN/translation.json | 7 --- src/locales/zh-TW/translation.json | 7 --- src/pages/options/routes/Setting.tsx | 6 --- src/pages/store/favicons.ts | 74 +--------------------------- src/pkg/config/config.ts | 13 +---- 10 files changed, 2 insertions(+), 135 deletions(-) diff --git a/src/locales/de-DE/translation.json b/src/locales/de-DE/translation.json index 90d53b47f..eec855cac 100644 --- a/src/locales/de-DE/translation.json +++ b/src/locales/de-DE/translation.json @@ -600,13 +600,7 @@ "favicon_service_scriptcat": "ScriptCat", "favicon_service_google": "Google", "favicon_service_duckduckgo": "DuckDuckGo", - "favicon_service_favicone": "Favicone", "favicon_service_icon-horse": "Icon Horse", - "favicon_service_favicon_im": "Favicon.im", - "favicon_service_vemetric": "Vemetric", - "favicon_service_yandex": "Yandex", - "favicon_service_allesedv": "Allesedv", - "favicon_service_manifest_im": "Manifest.im", "favicon_service_local": "Lokal abrufen", "editor": { "show_script_list": "Skriptliste anzeigen", diff --git a/src/locales/en-US/translation.json b/src/locales/en-US/translation.json index cc95cb0d7..adfc25758 100644 --- a/src/locales/en-US/translation.json +++ b/src/locales/en-US/translation.json @@ -600,13 +600,7 @@ "favicon_service_scriptcat": "ScriptCat", "favicon_service_google": "Google", "favicon_service_duckduckgo": "DuckDuckGo", - "favicon_service_favicone": "Favicone", "favicon_service_icon-horse": "Icon Horse", - "favicon_service_favicon_im": "Favicon.im", - "favicon_service_vemetric": "Vemetric", - "favicon_service_yandex": "Yandex", - "favicon_service_allesedv": "Allesedv", - "favicon_service_manifest_im": "Manifest.im", "favicon_service_local": "Local Fetch", "editor": { "show_script_list": "Show Script List", diff --git a/src/locales/ja-JP/translation.json b/src/locales/ja-JP/translation.json index dd0887221..f02ab5c34 100644 --- a/src/locales/ja-JP/translation.json +++ b/src/locales/ja-JP/translation.json @@ -600,13 +600,7 @@ "favicon_service_scriptcat": "ScriptCat", "favicon_service_google": "Google", "favicon_service_duckduckgo": "DuckDuckGo", - "favicon_service_favicone": "Favicone", "favicon_service_icon-horse": "Icon Horse", - "favicon_service_favicon_im": "Favicon.im", - "favicon_service_vemetric": "Vemetric", - "favicon_service_yandex": "Yandex", - "favicon_service_allesedv": "Allesedv", - "favicon_service_manifest_im": "Manifest.im", "favicon_service_local": "ローカル取得", "editor": { "show_script_list": "スクリプトリストを表示", diff --git a/src/locales/ru-RU/translation.json b/src/locales/ru-RU/translation.json index 3a9710c4a..1607c3c57 100644 --- a/src/locales/ru-RU/translation.json +++ b/src/locales/ru-RU/translation.json @@ -600,13 +600,7 @@ "favicon_service_scriptcat": "ScriptCat", "favicon_service_google": "Google", "favicon_service_duckduckgo": "DuckDuckGo", - "favicon_service_favicone": "Favicone", "favicon_service_icon-horse": "Icon Horse", - "favicon_service_favicon_im": "Favicon.im", - "favicon_service_vemetric": "Vemetric", - "favicon_service_yandex": "Yandex", - "favicon_service_allesedv": "Allesedv", - "favicon_service_manifest_im": "Manifest.im", "favicon_service_local": "Локальное получение", "editor": { "show_script_list": "Показать список скриптов", diff --git a/src/locales/vi-VN/translation.json b/src/locales/vi-VN/translation.json index 999becc8c..bca7992c6 100644 --- a/src/locales/vi-VN/translation.json +++ b/src/locales/vi-VN/translation.json @@ -600,13 +600,7 @@ "favicon_service_scriptcat": "ScriptCat", "favicon_service_google": "Google", "favicon_service_duckduckgo": "DuckDuckGo", - "favicon_service_favicone": "Favicone", "favicon_service_icon-horse": "Icon Horse", - "favicon_service_favicon_im": "Favicon.im", - "favicon_service_vemetric": "Vemetric", - "favicon_service_yandex": "Yandex", - "favicon_service_allesedv": "Allesedv", - "favicon_service_manifest_im": "Manifest.im", "favicon_service_local": "Lấy cục bộ", "editor": { "show_script_list": "Hiển thị danh sách script", diff --git a/src/locales/zh-CN/translation.json b/src/locales/zh-CN/translation.json index 42f1d3994..be595b6cd 100644 --- a/src/locales/zh-CN/translation.json +++ b/src/locales/zh-CN/translation.json @@ -600,14 +600,7 @@ "favicon_service_scriptcat": "ScriptCat", "favicon_service_google": "Google", "favicon_service_duckduckgo": "DuckDuckGo", - "favicon_service_favicone": "Favicone", "favicon_service_icon-horse": "Icon Horse", - "favicon_service_baidu": "百度 (Baidu)", - "favicon_service_favicon_im": "Favicon.im", - "favicon_service_vemetric": "Vemetric", - "favicon_service_yandex": "Yandex", - "favicon_service_allesedv": "Allesedv", - "favicon_service_manifest_im": "Manifest.im", "favicon_service_local": "本地获取", "editor": { "show_script_list": "显示脚本列表", diff --git a/src/locales/zh-TW/translation.json b/src/locales/zh-TW/translation.json index bd80dab35..9b4a48477 100644 --- a/src/locales/zh-TW/translation.json +++ b/src/locales/zh-TW/translation.json @@ -600,14 +600,7 @@ "favicon_service_scriptcat": "ScriptCat", "favicon_service_google": "Google", "favicon_service_duckduckgo": "DuckDuckGo", - "favicon_service_favicone": "Favicone", "favicon_service_icon-horse": "Icon Horse", - "favicon_service_baidu": "百度 (Baidu)", - "favicon_service_favicon_im": "Favicon.im", - "favicon_service_vemetric": "Vemetric", - "favicon_service_yandex": "Yandex", - "favicon_service_allesedv": "Allesedv", - "favicon_service_manifest_im": "Manifest.im", "favicon_service_local": "本地取得", "editor": { "show_script_list": "顯示腳本列表", diff --git a/src/pages/options/routes/Setting.tsx b/src/pages/options/routes/Setting.tsx index 3b356a3b4..e2ec472dc 100644 --- a/src/pages/options/routes/Setting.tsx +++ b/src/pages/options/routes/Setting.tsx @@ -339,13 +339,7 @@ function Setting() { {t("favicon_service_scriptcat")} {t("favicon_service_google")} {t("favicon_service_duckduckgo")} - {t("favicon_service_favicone")} {t("favicon_service_icon-horse")} - {t("favicon_service_favicon_im")} - {t("favicon_service_vemetric")} - {t("favicon_service_yandex")} - {t("favicon_service_allesedv")} - {t("favicon_service_manifest_im")} {t("favicon_service_local")} diff --git a/src/pages/store/favicons.ts b/src/pages/store/favicons.ts index 72ff2af19..21c86e8f3 100644 --- a/src/pages/store/favicons.ts +++ b/src/pages/store/favicons.ts @@ -237,22 +237,10 @@ export async function fetchIconByService(domain: string, service: FaviconService */ return [`https://icons.duckduckgo.com/ip3/${encodeURI(domain)}.ico`]; - case "favicone": - /** - * Favicone.com - * - 尺寸:支持 s 参数(如 16 / 32 / 64) - * - 限制:可能存在频率限制 - * - 收费:免费(无官方 SLA) - * - 中国访问:⚠️ 不稳定 - * - 缓存:建议缓存 - * - 特点:返回 png,适合前端展示 - */ - return [`https://favicone.com/${encodeURI(domain)}?s=64`]; - case "icon-horse": /** * Icon Horse - * - 尺寸:自动适配(返回较高清 png) + * - 尺寸:自动适配(返回较高清 ico) * - 限制:未公开限流策略 * - 收费:免费(轻量使用) * - 中国访问:⚠️ 较慢或不稳定 @@ -261,66 +249,6 @@ export async function fetchIconByService(domain: string, service: FaviconService */ return [`https://icon.horse/icon/${encodeURI(domain)}`]; - case "favicon.im": - /** - * favicon.im - * - 尺寸:自动获取(通常较清晰) - * - 限制:未知 - * - 收费:免费 - * - 中国访问:⚠️ 不稳定 - * - 缓存:建议缓存 - * - 特点:接口简单 - */ - return [`https://favicon.im/${encodeURI(domain)}`]; - - case "vemetric": - /** - * Vemetric favicon 服务 - * - 尺寸:支持 size 参数(如 32 / 64 / 128) - * - 限制:无公开说明 - * - 收费:免费 - * - 中国访问:⚠️ 可能较慢 - * - 缓存:建议缓存 - * - 特点:支持高清 favicon - */ - return [`https://favicon.vemetric.com/${encodeURI(domain)}?size=64`]; // 特殊图标 - - case "yandex": - /** - * Yandex favicon - * - 尺寸:仅支持 16x16 - * - 限制:无公开文档 - * - 收费:免费 - * - 中国访问:⚠️ 不稳定 - * - 缓存:建议缓存 - * - 特点:俄罗斯搜索引擎,fallback 用 - */ - return [`https://favicon.yandex.net/favicon/${encodeURI(domain)}`]; // 只有16x16 - - case "allesedv": - /** - * Allesedv favicon - * - 尺寸:路径中指定(如 /16/) - * - 限制:未知 - * - 收费:免费 - * - 中国访问:⚠️ 一般 - * - 缓存:建议缓存 - * - 特点:简单备用服务 - */ - return [`https://f1.allesedv.com/16/${encodeURI(domain)}`]; - - case "manifest.im": - /** - * manifest.im - * - 尺寸:自动解析网站 manifest(可能返回较大图标) - * - 限制:依赖目标站点 - * - 收费:免费 - * - 中国访问:⚠️ 不稳定 - * - 缓存:建议缓存 - * - 特点:可获取 PWA 图标(质量高) - */ - return [`https://manifest.im/icon/${encodeURI(domain)}`]; - case "local": default: /** diff --git a/src/pkg/config/config.ts b/src/pkg/config/config.ts index 46e51427b..c7a48576e 100644 --- a/src/pkg/config/config.ts +++ b/src/pkg/config/config.ts @@ -20,18 +20,7 @@ export type CloudSyncConfig = { params: { [key: string]: any }; }; -export type FaviconService = - | "scriptcat" - | "google" - | "duckduckgo" - | "favicone" - | "icon-horse" - | "favicon.im" - | "vemetric" - | "yandex" - | "allesedv" - | "manifest.im" - | "local"; +export type FaviconService = "scriptcat" | "google" | "duckduckgo" | "icon-horse" | "local"; export type CATFileStorage = { filesystem: FileSystemType;