Google Analytics嵌入API与Google图表之间存在冲突

时间:2017-03-17 12:59:20

标签: javascript google-analytics google-visualization google-analytics-api

当我在同一页面上加载Google Analytics嵌入API和Google Charts时,似乎存在冲突,更具体地说,当我使用Embed API绘制图表时也是如此。

为了使它更有趣,问题只发生在图表类型不同的情况下,例如嵌入API:TABLE和Charts:LINE

首先加载嵌入API图表并按预期工作。 图表LINE图表第二次加载并返回此错误:

  

您使用错误的数据类型而不是DataTable或DataView

调用了draw()方法

我感觉Embed API图表覆盖了这个功能:

google.charts.load('current', {
    packages: ['corechart', 'line', 'table']
});

更新

回答这个问题:Google Charts draw() method wrong type when given DataTable建议删除对http://www.google.com/jsapi的引用,但Google嵌入API图表停止工作,因为window.google.load不再定义,而是window.google.charts.load这是Google Charts所需要的,但似乎没有工作嵌入API图表。

1 个答案:

答案 0 :(得分:1)

我遇到了同样的问题并修复了脚本加载冲突。 解决方案是仅包含较新的图表加载器。

<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>

然后,在加载google chart api之前,请运行额外的代码suggested by Daniel LaLiberte

//Handles differences in load functions
google.load = google.load || google.charts.load;
google.setOnLoadCallback = google.setOnLoadCallback || google.charts.setOnLoadCallback;

//Loads the google analytics API
(function (w, d, s, g, js, fs) {
            //if ($('#googleCache').length > 0) return;
            g = w.gapi || (w.gapi = {});
            g.analytics = {
                q: [],
                ready: function (f) {
                    this.q.push(f);
                }
            };
            js = d.createElement(s);
            fs = d.getElementsByTagName(s)[0];
            js.src = 'https://apis.google.com/js/platform.js';
            js.id = "googleCache";
            fs.parentNode.insertBefore(js, fs);
            js.onload = function () {
                g.load('analytics');
            };
}(window, document, 'script'));

//Load the charts you want
google.charts.load('current', { packages: ['corechart', 'table', 'line', 'geochart'] });