@@ -125,18 +125,18 @@ const buildScriptInfo = (uuid: string, code: string, url: string, metadata: SCMe
125125} ) ;
126126
127127// 安装页可能是专为安装打开的新标签,也可能由 declarativeNetRequest 接管用户原标签。
128- // webNavigation 入口同样带有 byWebRequest 标记,但它通过 chrome.tabs.create() 打开独立标签,
129- // 因此必须额外保留 openedInNewTab 来源;只有真正接管用户原标签且确实有历史可退时才返回 。
128+ // 独立新标签可能继承多条历史,DNR 入口也可能没有上一页,因此必须同时检查入口与历史栈:
129+ // 仅在 DNR 接管且确实有历史可退时返回,否则关闭当前独立安装标签 。
130130// install()/close() 等可能在短时间内被重复触发(如用户连续点击、close 与 install 的
131131// setTimeout 前后脚打到),leaveInstallPageRunning 防止 back()/close() 被并发调用多次;
132132// 推到 requestAnimationFrame 里执行,让触发它的那次交互(如按钮点击态)先完成一帧渲染。
133133let leaveInstallPageRunning = false ;
134- const leaveInstallPage = ( byWebRequest : boolean , openedInNewTab : boolean ) => {
134+ const leaveInstallPage = ( byWebRequest : boolean ) => {
135135 if ( leaveInstallPageRunning ) return ;
136136 leaveInstallPageRunning = true ;
137137 requestAnimationFrame ( ( ) => {
138138 leaveInstallPageRunning = false ;
139- if ( byWebRequest && ! openedInNewTab && window . history . length > 1 ) {
139+ if ( byWebRequest && window . history . length > 1 ) {
140140 window . history . back ( ) ;
141141 } else {
142142 window . close ( ) ;
@@ -191,7 +191,6 @@ export function useInstallData(): UseInstallData {
191191 const handleRef = useRef < FileSystemFileHandle | null > ( null ) ;
192192 const skillUuidRef = useRef < string | null > ( null ) ;
193193 const byWebRequestRef = useRef ( false ) ;
194- const openedInNewTabRef = useRef ( false ) ;
195194
196195 useEffect ( ( ) => {
197196 const params = new URLSearchParams ( location . search ) ;
@@ -202,7 +201,6 @@ export function useInstallData(): UseInstallData {
202201 const urlIdx = location . search . indexOf ( "url=" ) ;
203202 const rawUrl = ! uuid && urlIdx !== - 1 ? location . search . slice ( urlIdx + 4 ) : null ;
204203 byWebRequestRef . current = params . get ( "byWebRequest" ) === "1" ;
205- openedInNewTabRef . current = false ;
206204 let cancelled = false ;
207205
208206 const failed = ( e : unknown ) => {
@@ -269,7 +267,6 @@ export function useInstallData(): UseInstallData {
269267 if ( code === undefined ) throw new Error ( t ( "install:script_info_load_failed" ) ) ;
270268 info . code = code ;
271269 byWebRequestRef . current = cached ?. [ 2 ] ?. byWebRequest === true ;
272- openedInNewTabRef . current = cached ?. [ 2 ] ?. openedInNewTab === true ;
273270 await loadFromInfo ( info , ! ! cached ?. [ 0 ] , cached ?. [ 2 ] || { } ) ;
274271 } else if ( rawUrl ) {
275272 // .cat.md URL → Skill 安装流程(DNR 把 *.cat.md 重定向到安装页),不走脚本解析;仅 agent 启用时
@@ -374,8 +371,7 @@ export function useInstallData(): UseInstallData {
374371 await scriptClient . install ( { script, code : info . code } ) ;
375372 notify . success ( t ( "install:success" ) ) ;
376373 }
377- if ( closeAfterInstall )
378- setTimeout ( ( ) => leaveInstallPage ( byWebRequestRef . current , openedInNewTabRef . current ) , 300 ) ;
374+ if ( closeAfterInstall ) setTimeout ( ( ) => leaveInstallPage ( byWebRequestRef . current ) , 300 ) ;
379375 } catch ( e ) {
380376 notify . error ( `${ t ( "install:failed" ) } : ${ ( e as Error ) ?. message || String ( e ) } ` ) ;
381377 }
@@ -399,7 +395,7 @@ export function useInstallData(): UseInstallData {
399395 if ( opts ?. noMoreUpdates && info && ! info . userSubscribe ) {
400396 void scriptClient . setCheckUpdateUrl ( info . uuid , false ) ;
401397 }
402- leaveInstallPage ( byWebRequestRef . current , openedInNewTabRef . current ) ;
398+ leaveInstallPage ( byWebRequestRef . current ) ;
403399 } , [ ] ) ;
404400
405401 // 监听文件变更后自动重装,并刷新视图代码
@@ -456,7 +452,7 @@ export function useInstallData(): UseInstallData {
456452 try {
457453 await agentClient . completeSkillInstall ( uuid ) ;
458454 notify . success ( t ( "install:success" ) ) ;
459- setTimeout ( ( ) => leaveInstallPage ( byWebRequestRef . current , openedInNewTabRef . current ) , 300 ) ;
455+ setTimeout ( ( ) => leaveInstallPage ( byWebRequestRef . current ) , 300 ) ;
460456 } catch ( e ) {
461457 notify . error ( `${ t ( "install:failed" ) } : ${ ( e as Error ) ?. message || String ( e ) } ` ) ;
462458 }
@@ -465,7 +461,7 @@ export function useInstallData(): UseInstallData {
465461 const cancelSkill = useCallback ( ( ) => {
466462 const uuid = skillUuidRef . current ;
467463 if ( uuid ) void agentClient . cancelSkillInstall ( uuid ) ;
468- leaveInstallPage ( byWebRequestRef . current , openedInNewTabRef . current ) ;
464+ leaveInstallPage ( byWebRequestRef . current ) ;
469465 } , [ ] ) ;
470466
471467 // 重新触发加载(供加载失败后的重试按钮)
0 commit comments