2017-09-05 5 views
0

eコマースウェブサイトの所有者であるクライアントに、自分のウェブサイトに埋め込むことができるJSモジュールを提供します。基本的に<script src=...>のHTMLに入れてJavaScriptを読み込み、thisのようなチェックアウト時にUIを表示します。私は(their docsによると)独立して、Googleアナリティクスのモジュールをロードしていますので、今埋め込み可能なJSモジュールでGoogleアナリティクスとグローバルに競合することを避ける

<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> 

は私がホスティングウェブサイトの独自のGoogle 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'の変化に注意してください)

それは技術的にwindow['GoogleAnalyticsObject']=customGlobalNameあるi['GoogleAnalyticsObject']=rビット、に依存しているため、それは、まだ危険なのです。 analytics.jsスクリプトが読み込まれると、window['GoogleAnalyticsObject']のグローバル名が検索され、使用されます。しかし、それは、デフォルトではgaになっていても、ホスティングウェブサイトのwindow['GoogleAnalyticsObject']の値を上書きすることを意味します。

私は彼らののために、彼らはrenaming the gtag objectへのより良い方法を許すが、それはアルファ段階ではまだだと:(。

任意の考えを見た?

+0

いいえ、問題は何か分かりません。なぜあなたの変数をGoogleと同じように呼んでいますか?あなたが適切な閉鎖であなたのjsをラップする場合、紛争の可能性は私には非常に最小限に見えます。基本的に私はなぜこれが問題なのか、 'ga'オブジェクトの名前を変更する必要があるのか​​理解していません – Liam

+2

@Liam、彼はGAスニペットを2度追加すると既存のgaオブジェクトを上書きして設定オプションをリセットするクライアント自身のトラッキングは中断されます)。これは実際に問題ではありません.Googleは複数のトラッカーを持つことができるようにコードを作成し、もう一度コードを実行しようとする試みを中止しますが、それは有効な問題です。 –

+0

ええ、私はあなたの答えからそれを得ました。とにかく@EikePierstorff – Liam

答えて

2

複数の独立したGAのオブジェクトを用意する必要はありません(目で、すべての通話を

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

、その後、接頭辞:名前の変更を使用すると、トラッカー名を使用してトラッカーオブジェクトの別のインスタンスを作成することができますので、GA名)は他のいくつかのスクリプトによって取得された場合にだけ可能ですEそれぞれの名前

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

トラッカー名は、すべてのトラッカーのインスタンスは、独自の構成を有していることを確認します(ちょうどあなたが名前の接頭辞を忘れてはいけない作るか、またはデフォルトのトラッカーに書き込まれます)。

干渉を最小限に抑えるには、custom cookie name(トラッカーの作成時に設定する必要があります)を使用することも検討してください。

関連する問題