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;