Skip to content

启动时插件自定义页签可能被误删 #17333

@TCOTC

Description

@TCOTC

问题描述

在应用启动阶段,插件加载与布局恢复存在时序问题。

当插件在 onload() 中异步后才调用 addTab() 注册自定义页签模型时,布局恢复逻辑可能先执行“无插件模型”清理,导致已持久化的自定义页签被移除。

影响

有异步初始化的插件会出现丢失自定义页签的情况

复现步骤

  1. 编写插件,在 onload() 中先 await 一个异步任务(例如 await new Promise(r => setTimeout(r, 1000)))。
  2. 异步之后再调用 this.addTab({ ... }) 注册模型。
  3. 通过 openTab({ custom: { id, data, ... } }) 打开一个自定义页签,并触发 saveLayout()
  4. 重启应用。
  5. 观察:该自定义页签可能在启动时被移除,未能恢复。

实际行为

启动时 JSONToLayout() 中“移除没有插件的 tab”逻辑会检查 app.plugins[].models

若此时插件已实例化但 onload() 尚未完成(addTab 尚未执行),则 customModelType 匹配失败,tab 被删除。

预期行为

启动恢复阶段不应自动删除插件的自定义页签,除非该插件已禁用。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions