diff --git a/src/pages/options/routes/ScriptEditor/index.tsx b/src/pages/options/routes/ScriptEditor/index.tsx index 6d81ada46..5b85b4552 100644 --- a/src/pages/options/routes/ScriptEditor/index.tsx +++ b/src/pages/options/routes/ScriptEditor/index.tsx @@ -148,16 +148,18 @@ export default function ScriptEditor() { // eslint-disable-next-line react-hooks/exhaustive-deps }, [loadingList, params.uuid]); - // 激活标签 → 同步 URL + 标题 + const activeTab = useMemo(() => state.tabs.find((x) => x.uuid === state.activeUuid), [state.tabs, state.activeUuid]); + const activeTabScriptName = activeTab?.script && i18nName(activeTab.script); + + // 激活标签或其脚本数据变化(如保存后改名) → 同步 URL + 标题 useEffect(() => { if (!state.activeUuid) return; if (params.uuid !== state.activeUuid) { void navigate(`/script/editor/${state.activeUuid}`, { replace: true }); } - const tab = state.tabs.find((x) => x.uuid === state.activeUuid); - if (tab) document.title = `${i18nName(tab.script)} - Script Editor`; + if (activeTabScriptName) document.title = `${activeTabScriptName} - Script Editor`; // eslint-disable-next-line react-hooks/exhaustive-deps - }, [state.activeUuid]); + }, [state.activeUuid, activeTabScriptName]); // 切换标签后把焦点恢复到对应编辑器(各标签实例常驻,仅丢失键盘焦点) useActiveEditorFocus(state.activeUuid, editorsRef); @@ -175,7 +177,6 @@ export default function ScriptEditor() { return () => window.removeEventListener("beforeunload", onBeforeUnload); }, [anyChanged]); - const activeTab = useMemo(() => state.tabs.find((x) => x.uuid === state.activeUuid), [state.tabs, state.activeUuid]); const subView = activeTab?.subView ?? "code"; // 仅后台/定时脚本可运行;普通脚本隐藏「运行」入口(与脚本列表/弹窗一致) const canRun = !!activeTab && activeTab.script.type !== SCRIPT_TYPE_NORMAL;