使用带有Require.js的Google Analytics问题

时间:2011-07-25 15:51:04

标签: javascript google-analytics analytics require

我正在使用require.js(http://requirejs.org/)来访问我网站上的许多功能,到目前为止,它似乎运行良好。在尝试包含Google Analytics代码时,我遇到了一个问题。该代码似乎拒绝添加utm.gif,并且没有向Google发送信标。我想知道这是不是范围之物。

define(function() {
    var Analytics = {};
    Analytics.Apply = function() {
    var _gaq = _gaq || [];
    _gaq.push(['_setAccount', 'UA-XXXXX-X']);
    _gaq.push(['_trackPageview']);

    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);
}
return Analytics;
});

ga.debug不会抛出任何错误,并且不会出现utm.gif。如果我将代码移到require.js之外(我的意思是模块化的javascript使用require.js,所以只需将其内联添加到页面中),utm.gif就会成功添加到页面中,ga.debug会发送它的信标。

我发现这个网站似乎成功使用了它,但我不确定该网站的用途是什么:http://paceyourself.net/2011/05/14/managing-client-side-javascript-with-requirejs/

其他任何人遇到组合require.js和GA的问题?

5 个答案:

答案 0 :(得分:9)

其他答案都没有对我有用,但在阅读Google Analytics documentation之后,我设法找出了有效的方法。

在您的主app.js

requirejs.config({
    paths: {
        ga: '//www.google-analytics.com/analytics'
    }
});

requirejs(['analytics'], function () {
    ...
});

在自己的文件analytics.js中:

define(['ga'], function () {
    window.ga('create', 'UA-XXXXXX-1');
    window.ga('send', 'pageview');
});

这是有效的,因为requirejs保证在函数执行时,analytics.js将完成加载。这意味着window.ga函数已准备好接受命令。

答案 1 :(得分:5)

有关此问题的讨论,请参阅此requirejs group thread

答案 2 :(得分:3)

对于最新版本的Google Analytics,我与RequireJS一起使用的代码段是 -

<script>
  window.GoogleAnalyticsObject = 'ga';
  window.ga = { q: [['create', 'UA-40327700-1', 'jspm.io'], ['send', 'pageview']], l: Date.now() };
  require(['http://www.google-analytics.com/analytics.js']);
</script>

答案 3 :(得分:0)

我们走了:

define([ 'http://www.google-analytics.com/ga.js' ], function ( ga ) {
    ga = { q: [['create', 'UA-18710277-1', 'jspm.io'], ['send', 'pageview']], l: Date.now() };
});

这是我目前正在使用的模块,请提示@ user2305274

答案 4 :(得分:0)

使用较新的analytics.js时,其他解决方案对我不起作用。直接将URL作为依赖项放置不起作用,因为requirejs无法确定脚本何时完成加载。 requirejs的异步插件似乎对我不起作用(虽然我将它用于谷歌地图api)。

以下方法对我有用:

define(function (require) {

  var module;

  // Setup temporary Google Analytics objects.
  window.GoogleAnalyticsObject = "ga";
  window.ga = function () { (window.ga.q = window.ga.q || []).push(arguments); };
  window.ga.l = 1 * new Date();

  // Immediately add a pageview event to the queue.
  window.ga("create", "{{TrackingID}}", "{{Domain}}");
  window.ga("send", "pageview");

  // Create a function that wraps `window.ga`.
  // This allows dependant modules to use `window.ga` without knowingly
  // programming against a global object.
  module = function () { window.ga.apply(this, arguments); };

  // Asynchronously load Google Analytics, letting it take over our `window.ga`
  // object after it loads. This allows us to add events to `window.ga` even
  // before the library has fully loaded.
  require(["http://www.google-analytics.com/analytics.js"]);

  return module;

});