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

Google Apps Script使用sessionStorage加载Google图表报undefined错误

问题根因

你遇到的问题和sessionStorage本身无关,是Google Charts库的异步加载时机导致的,你已经验证过sessionStorage存储的JSON字符串和服务端返回的一致,且下拉逻辑正常,说明sessionStorage的读写逻辑没有问题:

  • 首次加载页面时,向服务端请求图表数据是异步操作,网络请求+服务端响应本身有延迟,等到数据返回调用buildChart的时候,google.charts.load加载timeline包的异步操作已经完成,google.visualization.Timeline构造函数已存在,所以运行正常。
  • 刷新/返回页面时,图表数据直接从sessionStorage同步读取,没有了网络请求的延迟,此时如果Google Charts库还没加载完成,google.visualization对象未完全初始化,调用new google.visualization.Timeline(container)就会抛出undefined错误。

下拉选项的逻辑不需要依赖Google Charts库,所以不管执行时机如何都能正常运行,这就是两个逻辑表现不一致的核心原因。

排查验证

你可以在buildChart函数中报错的代码行前加一行日志验证:

console.log(google.visualization, google.visualization?.Timeline)

首次加载时两个值都有定义,刷新页面从sessionStorage读数据时,第二个值会返回undefined,即可确认根因。

解决方案

调整逻辑,确保Google Charts库加载完成后再执行图表渲染相关操作即可,参考修改方案:

  1. 把页面初始化逻辑放到Google Charts的加载回调中:
// 原来的google.charts.load保留,增加加载完成回调
google.charts.load('current', {'packages':['timeline']});
google.charts.setOnLoadCallback(function() {
  $(function() {
    testSession();
  });
});
  1. 移除原来$(function())中直接调用testSession()的逻辑,避免提前执行。

如果需要同时兼顾页面其他不需要依赖Google Charts的逻辑执行时机,也可以单独把图表读取渲染的逻辑拆分到加载回调中,下拉选项的逻辑依然可以在DOM加载完成后直接执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 19:54:03