2015-09-04 72 views
2

我使用Embed API在我的網站上從ServiceAccount中包含GA圖表。 該網站是一個單頁應用程序與AngularJS。 我爲每個圖表類型和控制器創建了幾個指令,將其命名爲GAController,它們之間共享。在此控制器中,我使用gapi.analytics.ready(..)等待分析對象完全加載。Google Charts Embed API不起作用

問題是,當頁面刷新後第一次調用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

我有同樣的問題,任何人都可以幫助我們 – andy

回答

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'));