2011-12-16 205 views
5

我正在更改網站的大部分內容,以使用jQuery Address'深層鏈接AJAX功能。我使用的URI如mysite.com/#!/page1/subpage/等。使用Google Analytics跟蹤AJAX請求

我讀過有關追蹤流量與_gaq.push()功能好一點,但我想知道是否有可能做的多一點傳統的時尚...

每個AJAX請求調用PHP函數它構建一個頁面並將其返回到<HTML>包裝器中,這使我可以輕鬆定義自定義頁面標題等等。

如果我把分析代碼放在那個頁面上,jQuery會調用那個頁面來觸發它來跟蹤訪問嗎?

回答

15

那麼你可以使用jQuery的AJAX活動在全球範圍內監聽AJAX請求,然後按索引到_gaq陣列(這似乎是最易維護的方法):

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

注意.on()在jQuery是新在這種情況下,它與.bind()相同。

另請注意,我尚未測試傳遞給全局AJAX事件的參數的內容。

UPDATE

您還可以使用$.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 - script tags in the HTML are parsed out by jQuery and not executed

2

我使用涉及請求系統將html作爲純文本,首先解析html以將所有腳本標記更改爲div,然後分離t軟管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(); 
}); 

使用此方法,您可以添加在每個頁面上執行跟蹤的腳本。我個人更喜歡在全球頁面上以類似於Jasper的建議的方式進行操作。

相關問題