我正在使用Embed API在我的网站上包含来自ServiceAccount的GA图表。
该站点是使用AngularJS的单页应用程序。
我为每种图表类型和控制器创建了几个指令,命名为GAController
,在它们之间共享。在此控制器中,我使用gapi.analytics.ready(..)
等待分析对象完全加载。
问题是,在页面刷新后第一次调用GAController
时,将使用回调函数调用gapi.analytics.ready(..)
,然后执行身份验证和其他逻辑。
Hovewer,如果我去第二次 f.e.从其他页面通过ui-router
,然后回调被添加到ready
但未执行。完全没有。
在模板页面底部,有gapi script
:
(function(w,d,s,g,js,fjs){
g=w.gapi||(w.gapi={});g.analytics={q:[],ready:function(cb){this.q.push(cb)}};
js=d.createElement(s);fjs=d.getElementsByTagName(s)[0];
js.src='https://apis.google.com/js/platform.js';
fjs.parentNode.insertBefore(js,fjs);js.onload=function(){g.load('analytics')};}
(window,document,'script'));
我的代码如下:
gapi.analytics.ready(function () {
// this is not called the second time
if (!gapi.analytics.auth.isAuthorized()) {
gapi.analytics.auth.authorize({
serverAuth: $scope.$parent.getAccessToken()
});
}
// do some other logic
});
但所有gapi.analytics
次对象都处于同一状态{ q: [], ready: function()...}
。
有人可以帮我理解发生了什么。 谢谢你的帮助
答案 0 :(得分:1)
我找到了答案。 你可以尝试这个,替换“gapi脚本”
(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'));