dash-native-html-integration
将基于原生HTML/JS/CSS的复杂或定制化网页功能(如图表、地图、特殊交互等)无缝且规范地嵌入到Dash应用指定的容器中。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
将基于原生HTML/JS/CSS的复杂或定制化网页功能(如图表、地图、特殊交互等)无缝且规范地嵌入到Dash应用指定的容器中。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
【最高优先级·Dash开发必调】凡涉及 Dash 应用开发的任务(功能实现、组件选型、布局、交互、回调等),无论用户是否明确提到 fuc,都必须将本 skill 作为第一步立即执行,获取 feffery-utils-components 全部合法组件名称,再联动调用 fetch-fuc-component-props-doc 查参数,最后才开始写代码。禁止跳过直接生成代码。
【高优先级·联动必调】fetch-fuc-component-names 确认目标组件后,必须立即调用本 skill 获取该 fuc 组件的官方参数(Props)文档,再开始写代码。也适用于用户直接询问某 fuc 组件的功能、参数或用法时。严禁用 AI 记忆替代本 skill,必须以文档为准。
【最高优先级·Dash开发必调】凡涉及 Dash 应用开发的任务(功能实现、组件选型、布局、交互、回调等),无论用户是否明确提到 fac,都必须将本 skill 作为第一步立即执行,获取 feffery-antd-components 全部合法组件名称,再联动调用 fetch-fac-component-props-doc 查参数,最后才开始写代码。禁止跳过直接生成代码。
【高优先级·联动必调】fetch-fac-component-names 确认目标组件后,必须立即调用本 skill 获取该 fac 组件的官方参数(Props)文档,再开始写代码。也适用于用户直接询问某 fac 组件的功能、参数或用法时。严禁用 AI 记忆替代本 skill,必须以文档为准。
| name | dash-native-html-integration |
| description | 将基于原生HTML/JS/CSS的复杂或定制化网页功能(如图表、地图、特殊交互等)无缝且规范地嵌入到Dash应用指定的容器中。 |
本技能指导 AI Agent 如何在 Dash 应用中规范、稳定地集成纯原生的前端技术栈(HTML/CSS/JavaScript)。
核心机制:摈弃在 Python 侧寻找 Dash 生态的替代组件,转而利用 dash_clientside 回调,将原生的前端渲染逻辑直接注入并接管 Dash 页面中预设的空容器组件(指定 ID 的 div 等)。
当面临以下需求时,应主动采用本技能工作流:
执行本技能前,必须首先明确以下上下文信息。如果缺失,必须主动向用户提问,待收集完整后再继续:
id。.py 文件路径。clientside_callback(浏览器端回调)逻辑写入哪个目标 .py 文件中。在执行过程中,严格遵守以下分步工作流:
不要急于修改 Dash 项目文件。首先,在系统外侧(或临时目录)生成一个纯净运行的 HTML 演示文件,确保底层前端逻辑可用且正确。
<div id="temp-target-container"></div> 内。class 和 id 必须足够特殊或带有前缀,绝不能污染当前 Dash 应用原有的样式。innerHTML 或调用第三方库的 dispose() 方法),确保该函数可被重复安全调用,不会发生 DOM 堆叠或内存泄露。在临时 HTML 验证无误后,将其核心逻辑拆解并工程化地融入到 Dash 项目中。
若 HTML 依赖外部 CDN 资源:
app = dash.Dash(...) 的入口文件。external_scripts 和 external_stylesheets 参数中。assets/css/ 目录下创建一个专门负责当前组件样式的独立 .css 文件。选择器限制在目标容器环境内。assets/js/ 目录下新建一个独立的 .js 文件,使用标准 Clientside API 封装:// 假设命名空间为 native_renderer,函数名为 render_my_feature
window.dash_clientside = Object.assign({}, window.dash_clientside, {
native_renderer: {
render_my_feature: function (targetId) {
// 设置轻微延时,确保 Dash DOM 完全渲染并挂载到文档流
setTimeout(() => {
const container = document.getElementById(targetId);
if (!container) return;
// ⚠️ 步骤 1:严格的清理动作,防止热重载或回调重复触发导致 DOM 叠加
// 例如:container.innerHTML = ''; 或者 instance.dispose();
// 🚀 步骤 2:植入从临时 HTML 提取来的原生渲染逻辑
// 将原有的 '#temp-target-container' 替换为传入的 container 对象
}, 200);
// 阻止 Dash 后端刷新此组件内容
return window.dash_clientside.no_update;
},
},
});
id(页面初次渲染时触发)来单次启动 JS 函数:from dash.dependencies import Input, Output, ClientsideFunction
# 若上文缺失 app 引用,需全局搜索定义位置并正确导入(如 from server import app)
app.clientside_callback(
ClientsideFunction(
namespace='native_renderer', # 对应 JS 中的命名空间
function_name='render_my_feature' # 对应 JS 中的函数名
),
Output('<目标组件ID>', 'children'),
Input('<目标组件ID>', 'id') # 核心机制:以自身 ID 为 Input,实现初次加载触发
)
app 实例是否已正确引入到了回调注册文件中(避免导包错漏)。HTML 文件原型。clientside_callback 必须且只能写在用户事前指定的回调管理文件内。