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() {}, }; diff --git a/src/app/service/service_worker/runtime.ts b/src/app/service/service_worker/runtime.ts index 032f119e0..df8db4819 100644 --- a/src/app/service/service_worker/runtime.ts +++ b/src/app/service/service_worker/runtime.ts @@ -337,6 +337,8 @@ export class RuntimeService { try { const res = await chrome.userScripts?.getScripts({ ids: ["scriptcat-content", "scriptcat-inject"] }); registered = res?.length === 2; + } catch { + // 该错误为预期内情况,无需记录 debug 日志 } finally { // 考虑 UserScripts API 不可使用等情况 runtimeGlobal.registered = registered; diff --git a/src/pages/components/PopupWarnings/index.tsx b/src/pages/components/PopupWarnings/index.tsx index 0f6b8f3f9..26130078c 100644 --- a/src/pages/components/PopupWarnings/index.tsx +++ b/src/pages/components/PopupWarnings/index.tsx @@ -10,13 +10,20 @@ interface PopupWarningsProps { function PopupWarnings({ isBlacklist }: PopupWarningsProps) { const { t } = useTranslation(); - const [isUserScriptsAvailableState, setIsUserScriptsAvailableState] = useState(false); + const [isUserScriptsAvailableState, setIsUserScriptsAvailableState] = useState(null); const [showRequestButton, setShowRequestButton] = useState(false); const [permissionReqResult, setPermissionReqResult] = useState(""); const updateIsUserScriptsAvailableState = async () => { - const flag = await checkUserScriptsAvailable(); - setIsUserScriptsAvailableState(flag); + const badgeText = await chrome.action.getBadgeText({}); + let displayState; + if (badgeText === "!") { + // 要求用户重启扩展/浏览器,会重置badge状态的 + displayState = false; + } else { + displayState = await checkUserScriptsAvailable(); + } + setIsUserScriptsAvailableState(displayState); }; useEffect(() => { @@ -24,6 +31,7 @@ function PopupWarnings({ isBlacklist }: PopupWarningsProps) { }, []); const warningMessageHTML = useMemo(() => { + if (isUserScriptsAvailableState === null) return ""; // 可使用UserScript的话,不查browserType const browserType = !isUserScriptsAvailableState ? getBrowserType() : null; 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(() => {