You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node-RED Template节点嵌入网站部件切换标签后无法自动加载如何解决

问题原因

该问题是Node-RED Dashboard的标签渲染机制和天气组件的初始化逻辑冲突导致的:

  • Node-RED Dashboard切换标签时会卸载隐藏标签的DOM元素,切回时重新渲染对应DOM
  • weatherwidget.io的脚本仅在首次加载时全局扫描一次对应类名的元素完成初始化,后续新增的同类型元素不会被自动识别,你之前尝试重新插入代码不生效是因为脚本会检测到自身已加载,不会重复执行初始化逻辑
解决方案

直接修改你原有的Weather ui_template节点的代码即可,无需额外的inject、ui_control节点:

<a class="weatherwidget-io" href="https://forecast7.com/en/n37d81144d96/melbourne/" data-font="Verdana" data-icons="Climacons Animated" data-theme="original" data-basecolor="#282828" data-accent="#282828" data-highcolor="#ffffff" data-lowcolor="#ffffff" data-cloudfill="#282828" data-raincolor="#0871b8" data-snowcolor="#ffffff">Melbourne VIC, Australia</a>
<script>
// 首次加载时初始化widget脚本
!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src='https://weatherwidget.io/js/widget.min.js';fjs.parentNode.insertBefore(js,fjs);}}(document,'script','weatherwidget-io-js');

// 监听当前组件可见性变化,切回标签时手动刷新widget
(function(scope) {
    scope.$watch('$visible', function(isVisible) {
        if (isVisible && window.weatherwidgetIO) {
            // 调用官方提供的重载方法,重新扫描当前页面的widget元素
            weatherwidgetIO.reload();
        }
    });
})(scope);
</script>

生效说明

  • 代码保留了原有的脚本首次加载逻辑,不会重复加载外部脚本
  • 新增的可见性监听会在你切回天气组件所在标签时,自动调用天气组件官方提供的重载方法,重新识别并渲染组件
  • 无需额外配置定时触发或标签切换监听节点,仅需替换单个ui_template节点的内容即可生效

内容的提问来源于stack exchange,提问作者solutery7

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 09:36:02