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

开启styledMode后Highcharts-Angular在Safari中无法导出图片

问题分析与解决方案

核心问题

在Angular项目中使用Highcharts + highcharts-angular封装器,开启styledMode: true后,仅在Safari 16.4中出现导出图片无响应的情况,控制台抛出TypeError: Attempted to assign to readonly property,Chrome、Firefox等浏览器无此问题。本地demo和新建Angular 15项目均能复现,但Stackblitz示例正常。

可能的解决方案

1. 升级Highcharts版本

当前使用的Highcharts 10.3.3可能存在与Safari 16.4的兼容性bug,后续版本(如11.x及以上)已修复类似的styledMode导出问题。执行以下命令升级:

npm install highcharts@latest

升级后重新测试导出功能,看是否解决问题。

2. 调整Angular构建优化配置

本地Angular CLI的生产构建优化(如代码压缩、摇树优化)可能导致Highcharts导出模块的属性被标记为只读,而Stackblitz的构建环境默认优化策略不同。可以临时关闭优化验证:
在angular.json的projects.[你的项目名].architect.build.configurations.production中修改:

"buildOptimizer": false,
"optimization": false

重新构建并测试,如果导出正常,则说明是优化规则导致的问题。后续可以给Highcharts相关代码添加优化白名单,在tsconfig.json中添加:

"angularCompilerOptions": {
  "enableIvy": true,
  "allowedCommonJsDependencies": ["highcharts"]
}

3. 调整导出模块配置

强制使用客户端导出,避免依赖导出服务器的处理,在图表配置中添加:

exporting: {
  fallToExportServer: false
}

该配置会让Highcharts直接在本地处理导出逻辑,绕过可能触发Safari只读属性报错的服务器交互环节。

4. 临时切换styledMode状态

在导出前临时关闭styledMode,导出完成后恢复,避免Safari对styledMode下的SVG样式属性做只读限制:

// 假设你通过组件引用获取图表实例
exportChart() {
  const chartInstance = this.highchartsComponent.chart;
  // 临时关闭styledMode
  chartInstance.options.styledMode = false;
  chartInstance.update({}, true);
  // 执行导出
  chartInstance.exportChart();
  // 延迟恢复styledMode,确保导出流程完成
  setTimeout(() => {
    chartInstance.options.styledMode = true;
    chartInstance.update({}, true);
  }, 100);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 12:17:14