嵌入Google Analytics图表报错:window.google.load is not a function(服务器端授权)
解决 "Analytics embed window.google.load is not a function" 错误
这个问题我帮不少开发者排查过,核心原因是Google已经弃用了旧版的google.load加载器,你参考的示例可能还依赖这套过时的逻辑,导致浏览器找不到该函数。下面是具体的修复方案:
1. 替换过时的API加载方式
直接移除原来依赖google.load的脚本加载逻辑,改用GA Embed API官方推荐的现代异步加载方式。
2. 修正前端初始化代码
以下是适配当前GA Embed API的完整前端代码示例,你可以替换掉原来的<script>部分:
<div class="bloc_card analytics_graphs" data="<?php echo $token ?>"> <div id="chart-1-container"></div> <div id="chart-2-container"></div> </div> <script> // 异步加载GA Embed API核心脚本 (function(w, d, s, url){ var js, fjs = d.getElementsByTagName(s)[0]; if (w.gapi) return; js = d.createElement(s); js.src = url; fjs.parentNode.insertBefore(js, fjs); }(window, document, 'script', 'https://apis.google.com/js/platform.js')); // 等待API加载完成后初始化图表 window.gapi.analytics.ready(function() { // 从DOM中获取服务器端生成的授权token const accessToken = document.querySelector('.analytics_graphs').dataset; // 创建授权客户端 const auth = new window.gapi.analytics.auth.Client({ access_token: accessToken }); // 完成授权后初始化图表 auth.authorize().then(function() { // 初始化图表1(示例:30天会话数趋势图) const chart1 = new window.gapi.analytics.googleCharts.DataChart({ query: { ids: 'ga:YOUR_VIEW_ID', // 替换为你的GA视图ID metrics: 'ga:sessions', dimensions: 'ga:date', 'start-date': '30daysAgo', 'end-date': 'today' }, chart: { container: 'chart-1-container', type: 'LINE', options: { width: '100%', curveType: 'function' } } }); chart1.execute(); // 初始化图表2(示例:Top 10页面浏览量) const chart2 = new window.gapi.analytics.googleCharts.DataChart({ query: { ids: 'ga:YOUR_VIEW_ID', // 替换为你的GA视图ID metrics: 'ga:pageviews', dimensions: 'ga:pagePath', 'start-date': '30daysAgo', 'end-date': 'today', 'max-results': 10, sort: '-ga:pageviews' }, chart: { container: 'chart-2-container', type: 'BAR', options: { width: '100%', legend: { position: 'none' } } } }); chart2.execute(); }); }); </script>
3. 关键注意事项
- 务必将代码中的
ga:YOUR_VIEW_ID替换为你实际的Google Analytics视图ID(可在GA后台的「视图设置」中找到)。 - 服务器端生成的
$token必须是有效的OAuth 2.0访问令牌,且需包含https://www.googleapis.com/auth/analytics.readonly权限。 - 不要同时加载旧的
google.load相关脚本,避免产生冲突。
为什么原来的代码会报错?
旧版GA Embed API示例依赖google.load('analytics', '1')加载API,但Google已经逐步淘汰了Google Loader服务,相关的google.load函数不再可用,因此会抛出"not a function"的错误。改用直接加载platform.js并通过gapi.analytics.ready回调初始化的方式,是当前官方推荐的稳定方案。
内容的提问来源于stack exchange,提问作者Pjotr Raskolnikov
相关产品推荐
相关产品推荐

