Twice in the last week, there have been periods when my Google Visualizations began showing a red error message (“b.G is not a function”) rather than the appropriate chart. My main tests were in an up-to-date version of Firefox. Initial tests suggested that there might be a race condition wherein the Google code triggered its OnLoadCallback before all classes were actually loaded. During initial testing, I was using the autoload technique in combination with the setOnLoadCallback method. I converted to the dynamic loading technique and continued to see the error.
Unfortunately, the error was transient an inconsistent such that I could not confirm the problem during initial testing after refactoring.
Log
- 2013-12-10: No tests definitively resolved it. Then it resumed working.</li>
- 2013-12-12: Hard refresh resolved it after about 30 minutes.</li>
Autoloading Callbacks for Visualization
Although I have moved away from autoloading in these scripts to mitigate this problem, I want make a note regarding the two distinct callbacks. The first is for when the loader is available, and the second is per-module (for those modules that support it). When autoloading visualizations with this URI (with callbacks _race_loader_
and _race_visualization_
for easy identification), you can see where they land in the script. The first callback seems preferrable only when you have additional libraries that you want to load dynamically.
_race_loader_(); google.load("visualization","1",{"autoloaded":true,"callback":"_race_visualization_"}); if (window['google'] != undefined && window['google']['loader'] != undefined) { if (!window['google']['visualization']) { window['google']['visualization'] = {}; google.visualization.Version = '1.0'; google.visualization.JSHash = 'd780f2951a73e815f003b2b487c1d0a3'; google.visualization.LoadArgs = 'file\75visualization\46v\0751\46async\0752'; } google.loader.writeLoadTag("script", google.loader.ServiceBase + "/api/visualization/1.0/d780f2951a73e815f003b2b487c1d0a3/format+en,default.I.js", true); }