跳转到主要内容
本指南帮助您从已弃用的猴子补丁(monkey-patching)方法迁移到新的上下文菜单扩展 API。 旧的猴子补丁方法修改 LGraphCanvas.prototype.getCanvasMenuOptionsnodeType.prototype.getExtraMenuOptions 已被弃用:
如果您在浏览器控制台中看到弃用警告,说明您的扩展正在使用旧 API,应该进行迁移。

迁移画布菜单

旧方法(已弃用)

旧方法在扩展设置期间修改原型:

新方法(推荐)

新方法使用专用的扩展钩子:

主要区别

旧方法新方法
setup() 中修改使用 getCanvasMenuItems() 钩子
包装现有函数直接返回菜单项
修改 options 数组返回新数组
通过 this 访问画布画布作为参数传递

迁移节点菜单

旧方法(已弃用)

旧方法修改节点类型原型:

新方法(推荐)

新方法使用专用的扩展钩子:

主要区别

旧方法新方法
beforeRegisterNodeDef() 中修改使用 getNodeMenuItems() 钩子
通过 if 检查指定类型在钩子中通过 if 检查指定类型
修改 options 数组返回新数组
通过 this 访问节点节点作为参数传递

常见模式

条件菜单项

两种方法都支持条件项,但新 API 更简洁:

添加分隔符

两种方法中添加分隔符的方式相同:

创建子菜单

创建子菜单的推荐方式是使用声明式的 submenu 属性:
这种声明式方法更简洁,并且与 ComfyUI 代码库中使用的模式一致。
虽然也支持使用 has_submenu: truenew LiteGraph.ContextMenu() 的基于回调的方法,但为了更好的可维护性,推荐使用声明式的 submenu 属性。

访问状态

故障排除

如何识别旧 API 的使用

在您的代码中查找这些模式:

理解弃用警告

如果您在控制台中看到此警告:
说明您的扩展正在使用旧方法,应该进行迁移。

验证迁移成功

迁移后:
  1. setup()beforeRegisterNodeDef() 中删除所有原型修改
  2. 添加 getCanvasMenuItems() 和/或 getNodeMenuItems() 钩子
  3. 测试您的菜单项是否仍然正确显示
  4. 验证控制台中没有出现弃用警告

完整迁移示例

迁移前:
迁移后:

其他资源