Skip to content

Instantly share code, notes, and snippets.

@ismyrnow
Last active March 14, 2022 21:32
Show Gist options
  • Star 27 You must be signed in to star a gist
  • Fork 7 You must be signed in to fork a gist
  • Save ismyrnow/6252718 to your computer and use it in GitHub Desktop.
Save ismyrnow/6252718 to your computer and use it in GitHub Desktop.
Google Analytics AMD Module
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(["//www.google-analytics.com/analytics.js"]);
return module;
});
@ismyrnow
Copy link
Author

ismyrnow commented Jun 5, 2014

Thanks @saxicek for that change. I've updated the gist.

For anyone wondering, I'm using this in production with RequireJS and the R.js optimizer, and it works great.

@ltodorov
Copy link

ltodorov commented Aug 2, 2014

I would recommend the Google's option for changing the global name of the analytics object.
Just add another variable gaName and replace all window.ga instances with window[gaName]

define(function (require) {

  var module,
      gaName = "ga"; // Global name of analytics object. Defaults to `ga`.

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

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

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

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

  return module;

});

@paulcanning
Copy link

If I add this to my RJS project, how exactly do I use it?

@prrraveen
Copy link

@paulcanning. You can just just add the module to your require / define method. It will take care of rest of things.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment