Skip to content

Instantly share code, notes, and snippets.

@alhankeser
Last active February 6, 2016 01:26
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save alhankeser/cde437c5fd4739f4bca3 to your computer and use it in GitHub Desktop.
Save alhankeser/cde437c5fd4739f4bca3 to your computer and use it in GitHub Desktop.
Switch between no testing tool and something like Optimizely randomly and track it in GA
(function (global) {
// YOUR LIST OF TOOLS - REPLACE THE 'XXXXXXXXXX' WITH YOUR OPTIMIZELY PROJECT ID
var yourTools = [
{tool: "None" },
{
tool: "optimizely",
projectID: "XXXXXXXXXX"
}];
// CHECKS FOR EXISTING COOKIE ALONG WITH WHAT TOOL - IF ANY - SHOULD BE LOADED
var toolSwitcher = global.cookie.replace(/(?:(?:^|.*;\s*)toolSwitcher\s*\=\s*([^;]*).*$)|^.*$/, "$1");
// IF THE COOKIE EXISTS, IT GRABS ITS VALUE AND MAKES SURE TO ADD THE RIGHT TOOL - OR NONE.
if (toolSwitcher) {
addTool(toolSwitcher);
}
// OR RANDOMLY PICKS ONE OF THE TOOS LISTED IN THE yourTools ARRAY OF OBJECTS
else {
var rand = Math.floor(Math.random() * yourTools.length);
// THE DIMENSION VALUE IS USED FOR GA AND THE COOKIE VALUE
var dimensionValue = yourTools[rand].tool;
setCookie(dimensionValue);
addTool(yourTools[rand]);
// RENAME "DIMENSION1" WITH THE CORRECT INDEX
ga('set', 'dimension1', dimensionValue);
}
// SETS PERSISTENT COOKIE SO THAT WHATEVER WAS LOADED WILL BE THE EXPERIENCE THE USER HAS THROUGHOUT
function setCookie(val) {
var d = new Date();
d.setTime(d.getTime() + (189216000000));
var expires = d.toUTCString();
var host = location.hostname;
var path = "/";
global.cookie = "toolSwitcher = " + val + "; domain = " + host + "; path = " + path + "; expires = " + expires;
}
// ADDS THE RIGHT TOOL - OR NONE
function addTool(tool) {
if (tool.projectID) {
var toolScript = global.createElement("script");
toolScript.type = "text/javascript";
toolScript.src = "//cdn.optimizely.com/js/" + tool.projectID + ".js";
var pageHead = global.getElementsByTagName("head")[0];
pageHead.insertBefore(toolScript, pageHead.firstChild);
}
}
}(document));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment