Copy and paste code to allow Optimizely to run with Asynchronous DMP Site Optimisation tag (JSON return)
// Oracle DMP > Optimizely Async handler
// CONFIG
window.bk_optimizely_helper = {};
window.bk_optimizely_helper.poll_intervals_ms = 50; // Set polling interval for checking
window.bk_optimizely_helper.checker_max_timeout_ms = 1000; // Set max timeout for checking bk_results (will unhide page after X ms)
window.bk_optimizely_helper.storer_max_timeout_ms = 5000; // Set max timeout for checking bk_results to store for later page views (will continue looking for DMP data to store in localStorage for X ms)
// DO NOT EDIT BELOW THIS LINE
window.bk_optimizely_helper.checker_poll_loop_max = window.bk_optimizely_helper.checker_max_timeout_ms / window.bk_optimizely_helper.poll_intervals_ms;
window.bk_optimizely_helper.storer_poll_loop_max = window.bk_optimizely_helper.storer_max_timeout_ms / window.bk_optimizely_helper.poll_intervals_ms;
// 1. Logger
window.bk_optimizely_helper.log = function(message) {
if (document.location.href.toLowerCase().indexOf("dmp_debug=true") > -1) {
console.log("DMP > OPTIMIZELY LOG : " + message);
}
}
// 2. Hide Body until timeout or experiment ready
window.bk_optimizely_helper.page_hide = function() {
var observer = new MutationObserver(function() {
if (document.body) {
window.bk_optimizely_helper.body_display_style = document.body.style.display;
bk_optimizely_helper.log("initial body display style stored as 'bk_optimizely_helper.body_display_style='" + bk_optimizely_helper.body_display_style);
document.body.style.display = "None";
bk_optimizely_helper.log("Body Hidden until DMP Data found or " + window.bk_optimizely_helper.checker_max_timeout_ms + "ms exceeded");
observer.disconnect();
}
});
observer.observe(document.documentElement, {
childList: true
});
};
// 3. Page Unhider
window.bk_optimizely_helper.page_unhide = function(){
document.body.style.display = window.bk_optimizely_helper.body_display_style;
bk_optimizely_helper.log("Unhiding Page");
}
// 4. Oracle DMP LocalStorage Store Helper
window.bk_optimizely_helper.bk_results_localstorage_helper = function(grab_vs_store) {
if (!window.localStorage) {
bk_optimizely_helper.log("localStorage not supported - aborting");
return {
"localstorage": "not supported"
};
}
// Store Data
if (grab_vs_store === "store") {
bk_optimizely_helper.log("Storing DMP Data in localStorage");
localStorage.bk_results = JSON.stringify(bk_results);
}
// Store Data
if (grab_vs_store === "grab") {
bk_optimizely_helper.log("Pulling DMP Data from localStorage");
if (localStorage.bk_results) {
bk_optimizely_helper.log("Data found in localStorage - returning data");
return JSON.parse(localStorage.bk_results);
} else {
bk_optimizely_helper.log("No data found in localStorage - returning {}");
return {}
}
}
}
// 5. Oracle DMP Data Checker
window.bk_optimizely_helper.bk_results_checker = function() {
setTimeout(function() {
// Check loop
window.bk_optimizely_helper.checker_loop = window.bk_optimizely_helper.checker_loop || 1;
window.bk_optimizely_helper.checker_loop++;
// Revert to localStorage if loops exceeded
if (window.bk_optimizely_helper.checker_loop > window.bk_optimizely_helper.checker_poll_loop_max) {
bk_optimizely_helper.log("'bk_results' not found - reverting to localStorage");
window.bk_results_cached = bk_optimizely_helper.bk_results_localstorage_helper("grab");
// Set Experiment Flag that DMP data available
window.dmp_data_available = true;
bk_optimizely_helper.log("Setting Experiment Flag 'window.dmp_data_available=true'");
// Unhide Page
window.bk_optimizely_helper.page_unhide();
// Begin Loop to check for DMP data and store in localStorage
bk_optimizely_helper.log("Waiting " + window.bk_optimizely_helper.storer_max_timeout_ms + "ms for 'bk_results' to store in localStorage");
window.bk_optimizely_helper.bk_results_storer();
} else {
// Check for DMP data
if (window.bk_results) {
// Set Experiment Flag that DMP data available
window.dmp_data_available = true;
bk_optimizely_helper.log("'bk_results' found - ready to run experiment if experiment poll has not timed out");
bk_optimizely_helper.log("Setting Experiment Flag 'window.dmp_data_available=true'");
// Unhide Page
window.bk_optimizely_helper.page_unhide();
// Dump data in LocalStorage
bk_optimizely_helper.bk_results_localstorage_helper("store");
} else {
// Loop Again
window.bk_optimizely_helper.bk_results_checker();
}
}
}, window.bk_optimizely_helper.poll_intervals_ms);
}
// 5. Oracle DMP Data Storer
window.bk_optimizely_helper.bk_results_storer = function() {
setTimeout(function() {
// Check loop
window.bk_optimizely_helper.storer_loop = window.bk_optimizely_helper.storer_loop || 1;
window.bk_optimizely_helper.storer_loop++;
// Abort if loop max exceeded
if (window.bk_optimizely_helper.storer_loop > window.bk_optimizely_helper.storer_poll_loop_max) {
bk_optimizely_helper.log("'bk_results' not found by storer - abort (nothing sent to localStorage)");
return;
} else {
// Check for DMP data
if (window.bk_results) {
// Set Experiment Flag that DMP data available
bk_optimizely_helper.log("'bk_results' found - storing in localStorage for later use");
// Dump data in LocalStorage
bk_optimizely_helper.bk_results_localstorage_helper("store");
} else {
// Loop Again
window.bk_optimizely_helper.bk_results_storer();
}
}
}, window.bk_optimizely_helper.poll_intervals_ms);
}
// Hide Page
bk_optimizely_helper.page_hide();
// Check for DMP data
bk_optimizely_helper.bk_results_checker();
// Config Logging
bk_optimizely_helper.log("Max DMP experiment wait time = " + window.bk_optimizely_helper.checker_max_timeout_ms + "ms");
bk_optimizely_helper.log("Max DMP localStorage wait time = " + window.bk_optimizely_helper.storer_max_timeout_ms + "ms");