2011-12-16 15 views
5

jQueryアドレスの「AJAXの深いリンク」機能を使用するように、ウェブサイトの大きな部分を変更しています。私はmysite.com/#!/page1/subpage/のようなURIを使用しています。Googleアナリティクスを使用してAJAXリクエストを追跡する

各AJAX要求は、PHPの関数を呼び出す...

私は_gaq.push()機能とトラフィックを追跡について良いビットをリードしてきましたが、もう少し伝統的なやり方でそれを行うことが可能であった場合、私は思っていましたページを作成して<HTML>ラッパーで返します。これにより、カスタムページタイトルなどを簡単に定義できます。

アナリティクスコードをそのページに配置すると、jQueryはそのページを呼び出して訪問を追跡しますか?

答えて

15

さてあなたは、グローバルにjQueryのAJAXイベントを使用することができますがAJAX要求をリッスンし、その後_gaq配列(これは最も保守性アプローチのように思える)上にインデックスをプッシュ:.on()はjQueryので新しく追加されたことを

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

注意1.7であり、この場合は.bind()と同じです。

また、グローバル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 - script tags in the HTML are parsed out by jQuery and not executed

2

私は要求が含まシステムを使用します。また、AJAXの応答本体にロードされたスクリプトを解析する$.globalEval()を使用することができます

UPDATE

htmlをプレーンテキストとして処理し、htmlを最初に解析してすべてのスクリプトタグをdivに変更し、detach t hose divsを追加してページを追加し、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(); 
}); 

この方法を使用すると、各ページでトラッキングを行うスクリプトを追加できます。私は個人的には、ジャスパーの提案と同様に、グローバルページ上でそれを行うことを好む。

5

他の回答は、(2013年のように)時代遅れです - Googleのは、彼らの新しいUniversal Analytics

を使用することをお勧めします。このように非同期でページビューを追跡することができます。

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

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

+0

は異なる何ですか?あなたはあまりにもしたいときに '_gaq.push(['_ trackPageview'])'を呼び出すことができます... – Jasper

+0

@ Jasper-このコードは、より最新の – Yarin

関連する問題