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

Chart.js 3.3.2正常运行,3.4.0及以上版本报TypeError错误求助

解决Chart.js 3.4.0+版本在Joomla 3.9环境下的#<Set> is not a valid property name错误

这个错误的核心原因是:Chart.js 3.4.0起开始使用ES6私有字段(以#开头的属性),但Joomla 3.9默认集成的MooTools重写了原生Object.defineProperty方法,导致无法正确处理这类私有属性。

以下是具体修复方案:

  • 步骤1:在加载Chart.js前恢复原生Object.defineProperty
    在Chart.js的脚本标签前插入这段代码,优先用原生方法处理私有字段:

    // 保存原生方法引用
    const nativeDefineProperty = Object.defineProperty;
    // 覆盖MooTools的重写逻辑
    Object.defineProperty = function(obj, prop, descriptor) {
      // 针对私有字段(#开头)使用原生实现
      if (prop.startsWith('#')) {
        return nativeDefineProperty(obj, prop, descriptor);
      }
      // 其他属性保留MooTools的处理逻辑
      return MooTools.lang.Methods.defineProperty.apply(this, arguments);
    };
    
  • 步骤2:保证代码执行顺序
    务必确保上述修复代码在Chart.js加载前执行,避免时序问题导致修复失效。

  • 步骤3:隔离作用域(可选)
    若仍存在冲突,可将Chart.js的初始化代码包裹在IIFE中,隔离全局作用域:

    (function() {
      const ctx = document.getElementById('your-chart-id').getContext('2d');
      new Chart(ctx, {
        // 你的图表配置项
        type: 'bar',
        data: { /* 数据内容 */ },
        options: { /* 配置选项 */ }
      });
    })();
    

如果以上方案无法解决,可考虑两种替代方案:

  • 升级Joomla至4.x版本(该版本已移除MooTools依赖,从根源解决兼容性问题)
  • 暂时回退至Chart.js 3.3.2版本,待环境适配后再升级

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 20:39:56