0

以前有一个关于将 Google Analytics 与 jquery Mobile 结合使用的问题,此处提供了成功的答案。然而,这适用于 1.9 之前的 jQuery 版本。

请有人帮助更改代码,以便将折旧的 .live 事件替换为当前的 .on 事件。我试过但没有成功。

这是 JavaScript 代码:

var _gaq = _gaq || [];

$(document).ready(function(e) {
    (function() {
      var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
      ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + 
          '.google-analytics.com/ga.js';
      var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
    })();
}); 

$('[data-role=page]').live('pageshow', function (event, ui) {
    try {
        _gaq.push(['_setAccount', 'YOUR_ANALYTICS_ID_GOES_HERE']);

        if ($.mobile.activePage.attr("data-url")) {
            _gaq.push(['_trackPageview', $.mobile.activePage.attr("data-url")]);
        } else {
            _gaq.push(['_trackPageview']);
        }
    } catch(err) {}

});
4

4 回答 4

3

Google 在Tracking Info页面上提供的代码如下所示,具体取决于您选择的功能:

  var _gaq = _gaq || [];
  _gaq.push(['_setAccount', 'UA-XXXXXXXX-1']);
  _gaq.push(['_setDomainName', 'foo.bar']);
  _gaq.push(['_trackPageview']);

  (function() {
    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
  })();

并且你被告知在开场后立即放置<body>。您应该将其与 jQuery Mobile(在 v1.3 上测试)保持在同一位置,方法是删除该_trackPageview行并在该代码块的末尾添加一个简单的片段,给出:

  var _gaq = _gaq || [];
  _gaq.push(['_setAccount', 'UA-XXXXXXXX-1']);
  _gaq.push(['_setDomainName', 'foo.bar']);

  (function() {
    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
  })();

    $(document).on('pageshow', ':jqmData(role="page")', function(evt, data) {
        var url = $(this).jqmData('absUrl');
        try {
            if (url) {
                url = $.mobile.path.parseUrl(url)
                _gaq.push(['_trackPageview', url.pathname + url.search + url.hash]);
            }
            else {
                _gaq.push(['_trackPageview']);
            }
        }
        catch(e) {}
    });
于 2013-09-11T08:28:10.690 回答
3

除了将 .live 替换为 .on 之外,Google 还将 ga.js 替换为 analytics.js,作为 Universal Analytics 更改的一部分。

我正在使用 Walf 发布的代码的变体来跟踪基于 jQuery Mobile 的站点上的各个页面,但需要对其进行更改以使用新的 Universal Analytics 配置。我在 body 标记之后有以下脚本:

(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', 'site_name.com');
ga('send', 'pageview');

$(function () {
    $('[data-role=page]').on('pageshow', function (event, ui) {
        try {
            if (location.hash) {
                ga('send', 'pageview', location.hash);
            }
            else {
                ga('send', 'pageview');
            }
        }
        catch (error) {
        }
    });
});

Google Analytics 中按位置哈希(例如#about)列出的页面为我提供了我想查看的有关访问者如何与站点交互的信息。

于 2014-01-01T11:44:15.540 回答
0

在开始的正文标签之后:

<script>
    (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-XXXXXXX-XX', 'exemple.com');
</script>

并且在每一页中:

<div data-role="page" ...>
    ...

    <script>
        $(document).off("pageshow", 'div[data-role="page"]').on("pageshow", 'div[data-role="page"]', function() {
            ga('send', 'pageview', $.mobile.path.getLocation());
        });
    </script>
</div>
于 2014-03-20T14:25:49.077 回答
-1

在将 .live() 更改为 .on() 之后,我还必须将<head>脚本<body>从. 否则我不会得到每一个页面视图。</div><div data-role="page">

于 2013-04-29T00:21:38.507 回答