如何调用TradingView Widget的save_image函数保存图表?
如何通过代码保存TradingView Widget图表
你遇到的问题是因为save_image是TradingView Widget的内部方法,并未暴露给公开的widget实例,所以直接调用widget.save_image()会触发类型错误。以下是两种可行的解决方案:
方案一:模拟点击内置保存按钮
TradingView Widget自带的保存按钮可通过DOM选择器定位,待图表加载完成后触发点击事件即可实现保存:
const widget = window.tvWidget = new TradingView.widget({ "autosize": true, "symbol": "NASDAQ:AAPL", "interval": "D", "timezone": "Etc/UTC", "theme": "dark", "style": "1", "locale": "en", "enable_publishing": false, "allow_symbol_change": true, "save_image": true, "studies": [ "STD;RSI" ], "container_id": "tradingview_009af" }); // 使用Widget自带的onReady回调,比message事件更可靠 widget.onReady(function() { console.log("图表已加载完成"); // 定位保存按钮(选择器可能随TradingView版本调整,需验证) const saveButton = document.querySelector('.tv-button.tv-button--secondary[data-name="save-image"]'); if (saveButton) { saveButton.click(); } else { console.error("未找到保存按钮,请检查DOM选择器"); } });
方案二:调用内部chart实例的save_image方法
通过Widget实例的内部属性获取chart对象,直接调用其save_image方法(注意:内部属性可能随版本更新变化,兼容性需自行验证):
const widget = window.tvWidget = new TradingView.widget({ "autosize": true, "symbol": "NASDAQ:AAPL", "interval": "D", "timezone": "Etc/UTC", "theme": "dark", "style": "1", "locale": "en", "enable_publishing": false, "allow_symbol_change": true, "save_image": true, "studies": [ "STD;RSI" ], "container_id": "tradingview_009af" }); widget.onReady(function() { console.log("图表已加载完成"); // 获取内部chart实例(不同版本可能是widget._chart或widget.chart) const chart = widget._chart || widget.chart; if (chart && chart.save_image) { chart.save_image(); } else { console.error("无法获取chart实例或save_image方法"); } });
注意事项
- 确保初始化配置中设置了
"save_image": true,否则保存功能会被禁用 - DOM选择器可能随TradingView的UI更新而失效,若方案一失效,需重新检查按钮的类名或属性
- 内部属性(如
_chart)不属于公开API,TradingView可能在后续版本中修改,生产环境使用需谨慎
内容的提问来源于stack exchange,提问作者JayK23
相关产品推荐
相关产品推荐

