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
相关产品推荐
相关产品推荐

