1

私たちは、要素の何百ものインラインonclick=""ハンドラーであることが多いサイトを削除しようとしています。これらの大部分は、onclick属性を介してアタッチされたOmnitureクリック追跡機能です。

これらはすべて同じコードなので、jQueryの.live()関数を使用して、単一のハンドラーをドキュメントにバインドするだけです。次に、追跡するリンク/ボタン/要素を更新して、class="trackable"のような一意のマーカーを付けます。ハンドラーに次のようなものを登録してもらいます(この擬似コードを検討してください)。

$('.trackable').live('click', function(e) { 
  trackClick();
};

明らかに、そこにいくつかのパラメータが必要であり、おそらくデータ属性などを介して、イベントソースオブジェクトからそれらを推測します。

私の懸念は主に信頼性です。私の読書から、live()ハンドラーは中断されません。たとえば、ブラウザーがページをアンロードする前に、イベントがバブルアップして処理される必要があります。でも、それはよくわかりません。ブラウザの互換性についても懸念があります。

live()イベントバインディングとOmniture(またはGoogle Analytics)の経験はありますか?

4

2 に答える 2

1

これが私の解決策です。かなり粗雑な感じですが、うまくいくと思います。

// attach omniture tracking to links within search results
jQuery('.app1 .app1-searchresults').on('click', '.app1-entry a', function(event) {
    var jLink = jQuery(event.target);

    s_gi(s_account).tl(true, 'o', 'App1: {instance}: {link}'.supplant({
        'instance': jQuery('.app1 .app1-header').text(),
        'link': jLink.text()
    }));

    setTimeout(function() { window.location = jLink.attr('href'); }, 500);

    event.preventDefault();
    return false;
});

重要な部分は jQuery の部分ではありません。おそらく、追跡したいリンクを識別し、委任されたイベント ハンドラーを実装するための何らかの方法があると思われますが、最後の 3 つのステートメントです。

  • setTimeout

Adobe の Ben Gaines によるこの記事では、(「リンク以外でのリンク トラッキングの使用」セクションで) s.tl() がナビゲートする前に 500 ミリ秒の遅延を導入することを示しています。これは、ページがアンロードされる前に非同期追跡呼び出しを実行する時間を確保するためです。Chrome がナビゲーション操作と同時の HTTP 呼び出しを「キャンセル」するのを見てきました。Fiddler は、要求リストからトラフィックを消去します。私は WireShark の経験がないので、用心深く過ちを犯し、同じ遅延を導入することにしました。

  • event.preventDefault()
  • return false

これにより、ユーザーがリンクをクリックしたときにブラウザーが正常に反応してすぐに移動することができなくなります。

ここでの粗雑さは setTimeout のようです。追跡呼び出しが行われることを確認するのにかかる時間が同じか短いイベント駆動型の代わりにタイマーを使用することに少し不快です。ただし、Omniture から公式にサポートされていて、明示的な継続またはカスタム追跡キャプチャ イベントを許可していない場合、これが最も安全な方法かもしれません。

これが役立つことを願っています。

于 2013-08-26T21:29:47.743 に答える
-1

live() を止められるのはあなただけです。Jquery の event.stopPropagation() またはブラウザー固有のメソッドのいずれかを使用して、ある時点で伝播を中断すると、確実に停止します。しかし、そうでなければあなたは大丈夫です。

于 2011-08-25T05:08:19.353 に答える