Использование Google Analytics для отслеживания запросов AJAX - PullRequest
5 голосов
/ 17 декабря 2011

Я изменяю большой раздел веб-сайта, чтобы использовать глубокие ссылки AJAX-функций jQuery Address. Я использую URI, такие как mysite.com/#!/page1/subpage/ и т. Д.

Я много читал об отслеживании трафика с помощью функции _gaq.push(), но мне было интересно, можно ли сделать это немного более традиционным способом ...

Каждый AJAX-запрос вызывает функцию PHP, которая создает страницу и возвращает ее в оболочке <HTML>, которая позволяет легко определять пользовательские заголовки страниц и т. Д.

Если я добавлю код аналитики на эту страницу, вызовет ли jQuery вызов этой страницы для отслеживания посещения?

Ответы [ 3 ]

15 голосов
/ 17 декабря 2011

Что ж, вы можете использовать AJAX-события jQuery для глобального прослушивания запросов AJAX, а затем вставить индекс в массив _gaq (это выглядит как наиболее поддерживаемый подход):

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

Обратите внимание, что .on() является новым в jQuery 1.7 и в этом случае совпадает с * 1006. *

Также обратите внимание, что я не проверял содержимое аргументов, передаваемых для глобальных событий 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 и не выполняются

5 голосов
/ 15 ноября 2013

Другие ответы устарели (по состоянию на 2013 г.) - Google рекомендует использовать их новые Universal Analytics

. Вы можете отслеживать просмотры страниц асинхронно, например:

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

См .: https://developers.google.com/analytics/devguides/collection/analyticsjs/pages#overriding

2 голосов
/ 17 декабря 2011

Я использую систему, которая включает запрос html в виде обычного текста, сначала разбирая html, чтобы поменять все теги сценария на div, отделить эти div, добавить страницу, затем просмотреть циклы div (которые на самом деле являются скриптами) и добавить их содержимое тегов сценария или создание тегов сценария с помощью src для этого элемента div. Это очень похоже на то, как это делает пример платформы 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();
});

используя этот метод, вы можете добавить скрипт, который выполняет отслеживание на каждой странице. Лично я предпочитаю делать это на глобальной странице способом, подобным предложенному Джаспером.

...