@@ -167,20 +167,8 @@ export class Extension extends Tab {
167167 const [ installed , setInstalled ] = useState ( false ) ;
168168 const [ disabledExtensions , setDisabledExtensions ] = Settings . use ( "disabledExtensions" ) ;
169169 const disabled = disabledExtensions . includes ( self . metadata . extension ?. id || "" ) ;
170- // 响应式快捷键列表:订阅 KeyBindsUI 的变化,安装插件后自动刷新
171- const [ extensionKeyBinds , setExtensionKeyBinds ] = useState ( ( ) => {
172- const prefix = `ext:${ self . metadata . extension ?. id || "" } :` ;
173- return KeyBindsUI . getAllUIKeyBinds ( ) . filter ( ( kb ) => kb . id . startsWith ( prefix ) ) ;
174- } ) ;
175-
176- useEffect ( ( ) => {
177- const extensionId = self . metadata . extension ?. id || "" ;
178- const prefix = `ext:${ extensionId } :` ;
179- const unsubscribe = KeyBindsUI . onKeyBindListChange ( ( allBinds ) => {
180- setExtensionKeyBinds ( allBinds . filter ( ( kb ) => kb . id . startsWith ( prefix ) ) ) ;
181- } ) ;
182- return unsubscribe ;
183- } , [ ] ) ;
170+ // 响应式快捷键列表:安装插件后自动刷新
171+ const extensionKeyBinds = KeyBindsUI . use ( ( kb ) => kb . id . startsWith ( `ext:${ self . metadata . extension ?. id || "" } :` ) ) ;
184172
185173 useEffect ( ( ) => {
186174 ( async ( ) => {
@@ -219,11 +207,12 @@ export class Extension extends Tab {
219207 variant = "outline"
220208 onClick = { async ( ) => {
221209 if ( await Dialog . confirm ( "确认卸载" , "将彻底删除此扩展,无法恢复。请确认是否继续。" ) ) {
222- ExtensionKeyBindManager . unregisterAll ( self . metadata . extension ?. id || "" ) ;
223- await self . fs . remove (
224- URI . file ( await join ( await appDataDir ( ) , "extensions" , self . metadata . extension ?. id || "" ) ) ,
225- ) ;
226- setDisabledExtensions ( disabledExtensions . filter ( ( id ) => id !== self . metadata . extension ?. id ) ) ;
210+ const extId = self . metadata . extension ?. id || "" ;
211+ ExtensionKeyBindManager . unregisterAll ( extId ) ;
212+ // 终止 Worker 并清除缓存,使重新安装时能创建新 Runtime
213+ ExtensionManager . unload ( extId ) ;
214+ await self . fs . remove ( URI . file ( await join ( await appDataDir ( ) , "extensions" , extId ) ) ) ;
215+ setDisabledExtensions ( disabledExtensions . filter ( ( id ) => id !== extId ) ) ;
227216 setInstalled ( false ) ;
228217 toast . success ( "扩展已卸载" ) ;
229218 }
@@ -281,7 +270,10 @@ export class Extension extends Tab {
281270 await writeFile ( await join ( base , self . iconFileName ) , self . iconRawData ) ;
282271 }
283272 // 安装完成后立即运行插件,使其快捷键等功能即时生效,无需重载
284- await ExtensionManager . getRuntime ( self . metadata . extension ?. id || "unknown" ) ;
273+ // 先 unload 清除可能残留的旧缓存,再创建新 Runtime
274+ const extId = self . metadata . extension ?. id || "unknown" ;
275+ ExtensionManager . unload ( extId ) ;
276+ await ExtensionManager . getRuntime ( extId ) ;
285277 setInstalled ( true ) ;
286278 toast . success ( "扩展已安装" ) ;
287279 } }
0 commit comments