5

jQuery Address のディープ リンク AJAX 機能を使用するように、Web サイトの大きなセクションを変更しています。などのURIを使用してmysite.com/#!/page1/subpage/います。

関数を使用してトラフィックを追跡することについてよく読んだこと_gaq.push()がありますが、もう少し伝統的な方法でそれを行うことができるかどうか疑問に思っていました...

各 AJAX 要求は、ページを作成してラッパーで返す PHP 関数を呼び出します<HTML>。これにより、カスタム ページ タイトルなどを簡単に定義できます。

そのページに分析コードを配置した場合、そのページを呼び出す jQuery はそれをトリガーして訪問を追跡しますか?

4

3 に答える 3

16

jQuery の AJAX Events を使用して、AJAX リクエストをグローバルにリッスンし、インデックスを_gaq配列にプッシュできます (これが最もメンテナンスしやすい方法のようです)。

$(document).on('ajaxComplete', function (event, request, settings) {
    _gaq.push(['_trackPageview', settings.url]);
});

は jQuery 1.7 の新機能であり、この場合.on()と同じであることに注意してください。.bind()

また、グローバル AJAX イベントに渡される引数の内容をテストしていないことにも注意してください。

アップデート

$.globalEval()AJAX 応答本文にロードされたスクリプトを解析するために使用することもできます: http://api.jquery.com/jquery.globalEval/

success: function(data) {

    var dom = $(data);

    dom.filter('script').each(function(){
        $.globalEval(this.text || this.textContent || this.innerHTML || '');
    });

    $('#mydiv').html(dom.find('#something').html());

}

ソース: jQuery - HTML 内のスクリプト タグは jQuery によって解析され、実行されません。

于 2011-12-16T21:12:16.463 に答える
5

他の回答は古くなっています (2013 年現在) - Google は、新しいユニバーサル アナリティクスの使用を推奨しています。

次のように、ページ ビューを非同期的に追跡できます。

ga('send', 'pageview', '/my-page');

参照: https://developers.google.com/analytics/devguides/collection/analyticsjs/pages#overriding

于 2013-11-14T20:10:54.893 に答える
2

私はHTMLをプレーンテキストとしてリクエストし、最初にHTMLを解析してすべてのスクリプトタグをdivに変更し、それらのdivを切り離し、ページを追加し、次にdiv(実際にはスクリプト)をループしてそれらのコンテンツをスクリプトに追加するシステムを使用しますタグを付けるか、その div の src を使用してスクリプト タグを作成します。history.js フレームワークの例がそれを行う方法と非常によく似ています。

$.get(urlToLoad).promise().done(function(html) {
    var outHTML = html;
    outHTML = outHTML.replace(/<script/ig, "<div class='iscript'").replace(/<\/script/ig, '</script');
    outHTML = $(outHTML);
    var scripts = outHTML.filter('div.iscript').detach();
    $content.html(outHTML);
    scripts.each(function() {
      var $this = $(this), s = document.createElement("script");
      if ($this.attr('src') != "") {
        s.src = $this.attr('src');
      } else {
        s.nodeValue = $this.text();
      }
      $content[0].appendChild(s); // jquery's append removes script tags
    });
}).always(function() {
    $contentclone.replaceWith($content);
    $content.slideDown();
    $contentclone.remove();
});

この方法を使用すると、各ページで追跡を行うスクリプトを追加できます。個人的には、Jasper が提案したのと同様の方法で、グローバル ページで行うことを好みます。

于 2011-12-16T21:17:17.657 に答える