From 9ef0ee5d01146eba68033e5d6db6378a84d73a71 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E4=B8=80=E4=B9=8B?= Date: Tue, 16 Dec 2025 14:46:11 +0800 Subject: [PATCH 1/8] =?UTF-8?q?=E5=A4=84=E7=90=86=20=E5=8F=AA=E6=98=BE?= =?UTF-8?q?=E7=A4=BA=E6=8F=90=E7=A4=BA=EF=BC=8C=E4=B8=8D=E6=98=BE=E7=A4=BA?= =?UTF-8?q?=E6=84=9F=E5=8F=B9=E5=8F=B7=20=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/service/service_worker/runtime.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/app/service/service_worker/runtime.ts b/src/app/service/service_worker/runtime.ts index 032f119e0..97cc20472 100644 --- a/src/app/service/service_worker/runtime.ts +++ b/src/app/service/service_worker/runtime.ts @@ -175,6 +175,7 @@ export class RuntimeService { } showNoDeveloperModeWarning() { + console.log("Showing developer mode warning"); // 判断是否首次 this.localStorageDAO.get("firstShowDeveloperMode").then((res) => { if (!res) { @@ -337,6 +338,8 @@ export class RuntimeService { try { const res = await chrome.userScripts?.getScripts({ ids: ["scriptcat-content", "scriptcat-inject"] }); registered = res?.length === 2; + } catch (e) { + console.error("chrome.userScripts.getScripts error:", e); } finally { // 考虑 UserScripts API 不可使用等情况 runtimeGlobal.registered = registered; From 35934d8880ca9386fc1871472253824556117e1e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E4=B8=80=E4=B9=8B?= Date: Tue, 16 Dec 2025 15:13:07 +0800 Subject: [PATCH 2/8] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=BC=B9=E5=87=BA?= =?UTF-8?q?=E7=AA=97=E5=8F=A3=E7=9A=84userscripts=E6=8F=90=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/service/service_worker/runtime.ts | 1 - src/pages/components/PopupWarnings/index.tsx | 5 +++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/app/service/service_worker/runtime.ts b/src/app/service/service_worker/runtime.ts index 97cc20472..8412c42d1 100644 --- a/src/app/service/service_worker/runtime.ts +++ b/src/app/service/service_worker/runtime.ts @@ -175,7 +175,6 @@ export class RuntimeService { } showNoDeveloperModeWarning() { - console.log("Showing developer mode warning"); // 判断是否首次 this.localStorageDAO.get("firstShowDeveloperMode").then((res) => { if (!res) { diff --git a/src/pages/components/PopupWarnings/index.tsx b/src/pages/components/PopupWarnings/index.tsx index 0f6b8f3f9..b6708f3be 100644 --- a/src/pages/components/PopupWarnings/index.tsx +++ b/src/pages/components/PopupWarnings/index.tsx @@ -10,13 +10,14 @@ interface PopupWarningsProps { function PopupWarnings({ isBlacklist }: PopupWarningsProps) { const { t } = useTranslation(); - const [isUserScriptsAvailableState, setIsUserScriptsAvailableState] = useState(false); + const [isUserScriptsAvailableState, setIsUserScriptsAvailableState] = useState(true); const [showRequestButton, setShowRequestButton] = useState(false); const [permissionReqResult, setPermissionReqResult] = useState(""); const updateIsUserScriptsAvailableState = async () => { + const badgeText = await chrome.action.getBadgeText({}); const flag = await checkUserScriptsAvailable(); - setIsUserScriptsAvailableState(flag); + setIsUserScriptsAvailableState(badgeText !== "!" && flag); }; useEffect(() => { From 917833413a216065a73b5590839e370a5bffa2e4 Mon Sep 17 00:00:00 2001 From: cyfung1031 <44498510+cyfung1031@users.noreply.github.com> Date: Tue, 16 Dec 2025 16:48:22 +0900 Subject: [PATCH 3/8] =?UTF-8?q?=E8=AF=A5=E9=94=99=E8=AF=AF=E4=B8=BA?= =?UTF-8?q?=E9=A2=84=E6=9C=9F=E5=86=85=E6=83=85=E5=86=B5=EF=BC=8C=E6=97=A0?= =?UTF-8?q?=E9=9C=80=E8=AE=B0=E5=BD=95=20debug=20=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/service/service_worker/runtime.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/app/service/service_worker/runtime.ts b/src/app/service/service_worker/runtime.ts index 8412c42d1..df6fcb680 100644 --- a/src/app/service/service_worker/runtime.ts +++ b/src/app/service/service_worker/runtime.ts @@ -338,6 +338,7 @@ export class RuntimeService { const res = await chrome.userScripts?.getScripts({ ids: ["scriptcat-content", "scriptcat-inject"] }); registered = res?.length === 2; } catch (e) { + // 该错误为预期内情况,无需记录 debug 日志 console.error("chrome.userScripts.getScripts error:", e); } finally { // 考虑 UserScripts API 不可使用等情况 From 426e3ec8b9a597f8947f3419f90e61b632e7e6cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E4=B8=80=E4=B9=8B?= Date: Tue, 16 Dec 2025 15:49:05 +0800 Subject: [PATCH 4/8] =?UTF-8?q?=E9=80=9A=E8=BF=87=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/pages/popup/App.test.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/pages/popup/App.test.tsx b/tests/pages/popup/App.test.tsx index d1725b06a..07da3afad 100644 --- a/tests/pages/popup/App.test.tsx +++ b/tests/pages/popup/App.test.tsx @@ -112,6 +112,7 @@ beforeEach(() => { callback?.(mockTabs); return Promise.resolve(mockTabs); }); + vi.spyOn(chrome.action, "getBadgeText").mockImplementation(() => Promise.resolve("")); }); afterEach(() => { From 25ee062b7ee6d9d3550699a986aafd798c0616a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E4=B8=80=E4=B9=8B?= Date: Tue, 16 Dec 2025 15:50:18 +0800 Subject: [PATCH 5/8] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/service/service_worker/runtime.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/app/service/service_worker/runtime.ts b/src/app/service/service_worker/runtime.ts index df6fcb680..df8db4819 100644 --- a/src/app/service/service_worker/runtime.ts +++ b/src/app/service/service_worker/runtime.ts @@ -337,9 +337,8 @@ export class RuntimeService { try { const res = await chrome.userScripts?.getScripts({ ids: ["scriptcat-content", "scriptcat-inject"] }); registered = res?.length === 2; - } catch (e) { + } catch { // 该错误为预期内情况,无需记录 debug 日志 - console.error("chrome.userScripts.getScripts error:", e); } finally { // 考虑 UserScripts API 不可使用等情况 runtimeGlobal.registered = registered; From f57c5e1e5388f838f8da528ade51e7da1babdfd5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E4=B8=80=E4=B9=8B?= Date: Tue, 16 Dec 2025 15:53:52 +0800 Subject: [PATCH 6/8] =?UTF-8?q?=E9=80=9A=E8=BF=87=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/chrome-extension-mock/action.ts | 6 ++++++ packages/chrome-extension-mock/index.ts | 2 ++ 2 files changed, 8 insertions(+) create mode 100644 packages/chrome-extension-mock/action.ts diff --git a/packages/chrome-extension-mock/action.ts b/packages/chrome-extension-mock/action.ts new file mode 100644 index 000000000..a6f08cce0 --- /dev/null +++ b/packages/chrome-extension-mock/action.ts @@ -0,0 +1,6 @@ +export default class Action { + getBadgeText() { + // 简单返回key作为测试值 + return ""; + } +} diff --git a/packages/chrome-extension-mock/index.ts b/packages/chrome-extension-mock/index.ts index cf1a56612..e5d2b5ba0 100644 --- a/packages/chrome-extension-mock/index.ts +++ b/packages/chrome-extension-mock/index.ts @@ -10,6 +10,7 @@ import DeclarativeNetRequest from "./declarativ_net_request"; import Permissions from "./permissions"; import Extension from "./extension"; import MockUserScripts from "./user_scripts"; +import Action from "./action"; const chromeMock = { tabs: new MockTab(), @@ -24,6 +25,7 @@ const chromeMock = { permissions: new Permissions(), extension: new Extension(), userScripts: new MockUserScripts(), + action: new Action(), init() {}, }; From ffcfdd13bc48cb6f0414d54527a6d39e628e5bdb Mon Sep 17 00:00:00 2001 From: cyfung1031 <44498510+cyfung1031@users.noreply.github.com> Date: Tue, 16 Dec 2025 17:00:28 +0900 Subject: [PATCH 7/8] default isUserScriptsAvailableState to null --- src/pages/components/PopupWarnings/index.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/pages/components/PopupWarnings/index.tsx b/src/pages/components/PopupWarnings/index.tsx index b6708f3be..3ea1b2e9e 100644 --- a/src/pages/components/PopupWarnings/index.tsx +++ b/src/pages/components/PopupWarnings/index.tsx @@ -10,7 +10,7 @@ interface PopupWarningsProps { function PopupWarnings({ isBlacklist }: PopupWarningsProps) { const { t } = useTranslation(); - const [isUserScriptsAvailableState, setIsUserScriptsAvailableState] = useState(true); + const [isUserScriptsAvailableState, setIsUserScriptsAvailableState] = useState(null); const [showRequestButton, setShowRequestButton] = useState(false); const [permissionReqResult, setPermissionReqResult] = useState(""); @@ -25,6 +25,7 @@ function PopupWarnings({ isBlacklist }: PopupWarningsProps) { }, []); const warningMessageHTML = useMemo(() => { + if (isUserScriptsAvailableState === null) return ""; // 可使用UserScript的话,不查browserType const browserType = !isUserScriptsAvailableState ? getBrowserType() : null; From c90e86253e0074f26039eccb74f2833b2ab3f788 Mon Sep 17 00:00:00 2001 From: cyfung1031 <44498510+cyfung1031@users.noreply.github.com> Date: Tue, 16 Dec 2025 17:08:29 +0900 Subject: [PATCH 8/8] =?UTF-8?q?=E8=A6=81=E6=B1=82=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E9=87=8D=E5=90=AF=E6=89=A9=E5=B1=95/=E6=B5=8F=E8=A7=88?= =?UTF-8?q?=E5=99=A8=EF=BC=8C=E4=BC=9A=E9=87=8D=E7=BD=AEbadge=E7=8A=B6?= =?UTF-8?q?=E6=80=81=E7=9A=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/components/PopupWarnings/index.tsx | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/pages/components/PopupWarnings/index.tsx b/src/pages/components/PopupWarnings/index.tsx index 3ea1b2e9e..26130078c 100644 --- a/src/pages/components/PopupWarnings/index.tsx +++ b/src/pages/components/PopupWarnings/index.tsx @@ -16,8 +16,14 @@ function PopupWarnings({ isBlacklist }: PopupWarningsProps) { const updateIsUserScriptsAvailableState = async () => { const badgeText = await chrome.action.getBadgeText({}); - const flag = await checkUserScriptsAvailable(); - setIsUserScriptsAvailableState(badgeText !== "!" && flag); + let displayState; + if (badgeText === "!") { + // 要求用户重启扩展/浏览器,会重置badge状态的 + displayState = false; + } else { + displayState = await checkUserScriptsAvailable(); + } + setIsUserScriptsAvailableState(displayState); }; useEffect(() => {