3

Chrome でのみ発生し、他のブラウザでは発生しない Google アナリティクス イベント トラッキングの問題があります。

アンカー リンクをクリックすると、次の Google アナリティクス トラッキング コードがサイトで起動します。

_gaq.push(['_trackEvent', 'Basket Remove', product_name, product_code, product_price, false]);          
_gaq.push(['rollup._trackEvent', 'Basket Remove', product_name, product_code, product_price, false]);       

Web プロキシ ツールを使用すると、最初の 1 つが起動していることがわかりますが、2 つ目は起動していません。これは、クリックが別のページへのリンクである多数の_trackEventクリックの場合のようであり、私が言ったように、Google Chromeでのみ明らかです。

JavaScript の実行が完了する前に、Chrome がアンカー内のリンクにリダイレクトすることを決定したかのようです。IE または FF ではこの問題は発生していません。

私はsetTimeout呼び出しの後とその間に固執しようとしましたが、役に立ちませんでした。

setTimeout('document.location="' + link.href + '"', 500);
4

2 に答える 2

8

問題は、現在のウィンドウに新しいページをロードするリクエストが行われると、Chrome (および他のブラウザー) が保留中の画像リクエストをキャンセルすることです。2 番目の _trackEvent で余分な処理が行われているため、最初の _trackEvent 要求が記録されていることは幸運でした。

リンクに遅延を追加するときは、リンクのデフォルト アクションが実行されないようにする必要があります。そうしないと、setTimeout 関数が発生する前に、デフォルト アクションがリンクをたどります。

次のコードは、リンクが新しいウィンドウで開いているかどうかを確認します。開いていない場合は、リンクをたどるのを 150 ミリ秒遅らせます。

function track(link) {
  _gaq.push(['_trackEvent', 'Basket Remove', product_name, product_code, product_price, false]);          
  _gaq.push(['rollup._trackEvent', 'Basket Remove', product_name, product_code, product_price, false]);
  if ('_blank' == link.target) return true;
  var url = link.href;
  setTimeout(function(){ document.location = url; }, 150);
  return false;
}

<a href="someURL" onclick="return track(this);">ClickMe</a>
于 2013-03-05T20:50:37.927 に答える
1

ここに到着し、提案された答えがうまくいかなかった人のために:

私がしたことは、追跡コードを配置することでした(つまり_gaq.push()、関数内にsetTimeout、パラメーターとして1500ミリ秒を与えました.

私は作業してanalytics.jsおり、私のコードは次のようになります。

setTimeout(function(){ga('send', 'event', 'click' , 'label',2);}, 1500);

したがって、本質的に、追跡を使用してサイトの自然な使用を妨げません。むしろ、ユーザーがすでに行ったことの後に追跡を報告します。

于 2014-01-13T08:47:05.800 に答える