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;
});
@szepeviktor
Copy link

thank you!
it works in curl.js
cujojs/curl#241

@iDVB
Copy link

iDVB commented Jan 12, 2014

Anyone have any issues where this is working locally with hostfile change but not in production?
GA docs say "be sure the tracking code in included just before the closing /HEAD tag. RequireJS is usually just before the closing /BODY tag, not not sure if thats an issue?

Its the weirdest thing that I have this working locally and pushed it live and now GA Admin is not reporting any traffic under Realtime at all.

I have the url in GA admin set to www.jamdeo.com and the domain in the tracking code set to the same.

@saxicek
Copy link

saxicek commented Feb 13, 2014

You should use require(["//www.google-analytics.com/analytics.js"] instead of require(["http://www.google-analytics.com/analytics.js"].

@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