2017-09-05 57 views
0

我們爲電子商務網站所有者提供我們的客戶可以嵌入其網站的JS模塊。它基本上是一個<script src=...>,他們在HTML中加載我們的JavaScript並在結賬時顯示我們的UI,類似於this避免與嵌入式JS模塊中的Google Analytics發生全球衝突

現在,因爲我獨立加載谷歌分析模塊(根據their docs):

<script> 
(function(i,s,o,g,r,a,m{i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ 
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), 
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) 
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga'); 

// ... 
</script> 

我冒着與託管網站自身的谷歌Analytics(分析)模塊的衝突。

即使我跟隨renaming the ga object說明:

<script> 
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ 
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), 
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) 
})(window,document,'script','//www.google-analytics.com/analytics.js','analytics'); 
</script> 

(注意'analytics'變化)

它仍然是有風險的,因爲它取決於i['GoogleAnalyticsObject']=r位,這在技術上是window['GoogleAnalyticsObject']=customGlobalName。 analytics.js腳本加載時,會在window['GoogleAnalyticsObject']中查找全局名稱並使用它。但是這意味着我會覆蓋託管網站的值window['GoogleAnalyticsObject'],即使它默認爲ga

我看到他們,它們允許renaming the gtag object一個更好的辦法,但它仍然處於alpha階段:(。

有什麼想法?

+0

不,我不明白問題是什麼。你爲什麼把你的變量和谷歌一樣調用?如果你正確關閉你的js,衝突的可能性對我來說似乎很小。基本上我不明白爲什麼這是一個問題,或者你爲什麼需要重命名'ga'對象 – Liam

+2

@Liam,他擔心再次包括GA片段將覆蓋現有的ga對象並因此重置其配置選項(所以客戶自己的追蹤將被打亂)。這實際上不是問題,因爲Google編寫代碼以便您可以擁有多個跟蹤器,並且會中止嘗試再次運行該代碼段,但這是一個值得關注的問題。 –

+0

是的,我從你的答案中得到了答案。感謝您澄清@EikePierstorff – Liam

回答

2

這是沒有必要擁有多個獨立的GA對象(重命名只是可能的情況下,GA名稱採取一些其他腳本),因爲你可以通過使用跟蹤器的名稱創建的跟蹤對象的不同實例:

ga('create', 'UA-XXXXX-Y', 'auto', 'embeddableJSmoduleTracker'); 

,然後前綴您的來電與日E中各個名稱

ga('embeddableJSmoduleTracker.set','userId','abcde'); 
ga('embeddableJSmoduleTracker.send', 'pageview'); 

跟蹤器名稱確保所有跟蹤程序都有自己的配置(只要確保你不要忘了名字的前綴,否則你會寫入默認跟蹤器)。

爲了儘量減少干擾,您可能還會考慮使用custom cookie name(創建跟蹤器時必須設置)。

相關問題