2017-10-17 21 views
1

我得到這個:JavaScript的:從,直到我的腳本執行防止Google分析腳本準備好

this.$resource('api/elements/item').get().then(function (result) { 
     // do something cool 

    }); 

這是工作的罰款。

但是現在,我想阻止另一個腳本(google分析標記)執行,直到此腳本準備就緒。

這是谷歌分析標籤的例子:

<script async src="https://www.googletagmanager.com/gtag/js?id=UA-5xxxxxx-5"</script> 
    <script> 
    window.dataLayer = window.dataLayer || []; 
    function gtag(){dataLayer.push(arguments);} 
    gtag('js', new Date()); 

    gtag('config', 'UA-5xxxxxx-5'); 
    </script> 
</body> 

那麼,這可能讓谷歌的腳本,等待我的腳本?當你準備

回答

1

呼叫GTAG ...

<script async src="https://www.googletagmanager.com/gtag/js?id=UA-5xxxxxx-5"</script> 
    <script> 
    window.dataLayer = window.dataLayer || []; 
    function gtag(){dataLayer.push(arguments);} 
    gtag('js', new Date()); 

    //gtag('config', 'UA-5xxxxxx-5'); <-- REMOVE THIS LINE 
    </script> 




this.$resource('api/elements/item').get().then(function (result) { 
     // do something cool 
     gtag('config', 'UA-5xxxxxx-5'); <-- CALL GTAG HERE 
    }); 
+0

正如我無法控制用戶輸入什麼(用戶可能會複製和粘貼谷歌創建的標籤),這是一個有效的解決方案,但不是最好的一個。 – SPQRInc

+0

解決方案很好。但是在這裏我們首先加載腳本然後調用。 如果我們需要在這個。$ resource()中加載符合問題的腳本,那麼呢? –

0

我已經從一種適合我的作品改編本。 我看不出任何理由,它也不適合你。

<script async src="https://www.googletagmanager.com/gtag/js?id=UA-5xxxxxx-5"> 
</script> 
<script> 
window.dataLayer=window.dataLayer||[]; 
function gtag() 
{ 
dataLayer.push(arguments); 
} 
gtag('js',new Date()); 
this.$resource('api/elements/item').get().then(function(result) 
{ 
//do something awesome 
gtag('config','UA-5xxxxxx-5'); 
}); 
</script> 
+0

這裏我們得到了錯誤:VM1391:2 Uncaught ReferenceError:dataLayer沒有定義 –

+0

請同步加載您的腳本意味着刪除異步

+0

我真的必須在我發佈之前開始測試代碼。 我會看看它。 – sanepete

0

你只是在尋找一種動態添加腳本標記的方法嗎?如果是的話,這應該做的伎倆:

this.$resource('api/elements/item').get().then(function(result) { 

    // Add script tag to document 
    var script = document.createElement('script'); 
    script.src = 'https://www.googletagmanager.com/gtag/js?id=UA-5xxxxxx-5'; 
    document.body.appendChild(script); 

    window.dataLayer = window.dataLayer || []; 

    function gtag() { 
    dataLayer.push(arguments); 
    } 
    gtag('js', new Date()); 

    gtag('config', 'UA-5xxxxxx-5'); 
});