jQuery Mobile Google Universal Analytics

2019-05-27 11:05发布

问题:

I've been happily using this best practice http://roughlybrilliant.com/jquery_mobile_best_practices#7 for integrating ga.js with jQuery Mobile. I'm planning to upgrade to analytics.js using the new Universal Analytics tracking code. I wonder whether something like this below will work following the best practice using the ga.js tracking code.

<script>
$(document).ready(function (e) {
    (function (i, s, o, g, r, a, m) {
        i['GoogleAnalyticsObject'] = r;
        i[r] = i[r] || function () {
            (i[r].q = i[r].q || []).push(arguments)
        }, i[r].l = 1 * new Date();
        a = s.createElement(o),
        m = s.getElementsByTagName(o)[0];
        a.async = 1;
        a.src = g;
        m.parentNode.insertBefore(a, m)
    })(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga');
});

$(document).on('pageshow', '[data-role=page], [data-role=dialog]', function (event, ui) {
    try {
        ga('create', 'UA-XXXXXXXX-X', 'domain.com');
        if ($.mobile.activePage.attr("data-url")) {
            ga('send', 'pageview', '$.mobile.activePage.attr("data-url")');
        } else {
            ga('send', 'pageview');
        }
    } catch (err) {}
});
</script>

回答1:

Everything should work above save the '$.mobile...' part being in quotes. A few of their suggestions are a bit off though. Refractored below

<script>
// domReady is unnecessary here and can slow down perceived performance
// $(document).ready(function (e) { 
    (function (i, s, o, g, r, a, m) {
        i['GoogleAnalyticsObject'] = r;
        i[r] = i[r] || function () {
            (i[r].q = i[r].q || []).push(arguments)
        }, i[r].l = 1 * new Date();
        a = s.createElement(o),
        m = s.getElementsByTagName(o)[0];
        a.async = 1;
        a.src = g;
        m.parentNode.insertBefore(a, m)
    })(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga');
    ga('create', 'UA-XXXXXXXX-X', 'domain.com'); // move this here!
// });

$(document).on('pageshow', '[data-role=page], [data-role=dialog]', function (event, ui) {
    try {
        if ($.mobile.activePage.attr("data-url")) {
            ga('send', 'pageview', $.mobile.activePage.attr("data-url")); // remove quotes
        } else {
            ga('send', 'pageview');
        }
    } catch (err) {}
});
</script>