TypeError: this.app.$destroy is not a function in gradio.js

用户在 HTML 页面中通过 标签引入 gradio.js (例如从 https://gradio.s3-us-west-2.amazonaws.com/6.0.2/gradio.js)来嵌入 Gradio 应用,并在浏览器控制台中观察到该报错。注意:虽然抛出该错误,但应用本身似乎

TypeError: this.app.$destroy is not a function in gradio.js

TypeError: this.app.$destroy is not a function in gradio.js

快速结论:该报错发生在以嵌入式方式将 Gradio 应用加载到 HTML 页面(例如 Web Component)中时,由 gradio.js 脚本调用已废弃的 Svelte $destroy() 方法所致。优先排查是否是通过 CDN 引入 gradio.js 进行嵌入集成。

问题场景

用户在 HTML 页面中通过 <script> 标签引入 gradio.js(例如从 https://gradio.s3-us-west-2.amazonaws.com/6.0.2/gradio.js)来嵌入 Gradio 应用,并在浏览器控制台中观察到该报错。注意:虽然抛出该错误,但应用本身似乎仍能正常运行,不一定会影响功能。

报错原文

Uncaught (in promise) TypeError: this.app.$destroy is not a function

原因分析

该错误的根本原因是 gradio.js 中的 spa/src/main.ts(第 92 行)调用了 Svelte 旧版组件销毁方法 $destroy(),但在 Gradio 进行 Svelte 5 迁移后,该 API 已不再被定义或支持。Svelte 5 使用新的 unmount API 来销毁组件(参考 Svelte 官方文档:Imperative Component API – unmount),而代码未同步更新,导致 this.app 上不存在 $destroy 方法。

环境排查

  • Gradio 版本:6.0.2(通过 CDN 引入的版本)
  • 集成方式:通过 gradio.js 脚本将 Gradio 应用嵌入 HTML 页面(非 Python 直接启动 Flask/FastAPI 服务器的模式)
  • 浏览器控制台错误观察:与其他功能报错区分

解决步骤

  1. 可优先尝试:在 Gradio 官方修复此问题之前,确认你的嵌入应用是否功能正常。如 Issue 中所述,尽管该报错出现,应用仍可能正常工作,可忽略此错误。
  2. 如果希望消除控制台错误,可参考 @freddyaboulton 提出的临时修补方案:在调用 this.app.$destroy() 之前添加存在性检查,避免直接调用不存在的函数。但这需要修改 Gradio 的源码后自行构建 gradio.js
    if (this.app && this.app.$destroy) {
        this.app.$destroy();
    }
  3. 等待 Gradio 官方进行 Svelte 5 兼容性修复,将 $destroy 替换为新的 unmount API(由维护者 @pngwn@dawoodkhan82 处理)。

验证方法

重新加载包含 Gradio 嵌入的页面,打开浏览器开发者工具(F12),查看控制台是否不再出现 Uncaught (in promise) TypeError: this.app.$destroy is not a function 错误。同时确认 Gradio 应用的交互功能(如组件挂载、输出显示)正常运行。

参考来源

gradio-app/gradio #12507

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

celebrityanime
celebrityanime
文章: 10237

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注