/* Controltag Loader for Guardian */ (function(){ function debugLog(msg) { var isDebug = /kxdebug=(1|true)/.test(location); if (isDebug && typeof window.console === 'object' && typeof console.info === 'function') { console.info(msg); } } function loadCT(url, callback) { debugLog('Loading Krux control tag.'); var ct_element = document.createElement('script'); ct_element.async = true; ct_element.src = url; ct_element.onload = ct_element.onreadystatechange = function() { var state = ct_element.readyState; if (!callback.done && (!state || /loaded|complete/.test(state))) { callback.done = true; callback(); } }; // Fetch the first script element, so we can insert the // controltag before it. There *must* be at least one // script element, or this code would never be called var sibling = document.getElementsByTagName('script')[0]; sibling.parentNode.insertBefore(ct_element, sibling); }; function loadConfig() { debugLog('Loading krux configuration.'); var config = {"partner_segment_map": {}, "context_terms": [], "tags": [{"content": "", "target": "", "target_action": null, "require": "", "docwrite": null, "template_replacement": 1, "execution_results": null, "tier": 2, "internal": 1, "content_type": "html", "timing": "asap", "method": "document", "type": "publisher", "id": 35371, "name": "Krux Load Segments v2"}, {"content": "", "target": null, "target_action": "append", "require": "", "docwrite": null, "template_replacement": 1, "execution_results": null, "tier": 1, "internal": 22, "content_type": "html", "freq_cap": 3, "timing": "onload", "method": "document", "type": "data provider", "id": 41999, "name": "Neustar AdAdvisor S2S provider tag"}, {"content": "", "target": null, "target_action": "append", "require": "", "docwrite": null, "template_replacement": 1, "execution_results": null, "tier": 1, "internal": 21, "content_type": "html", "freq_cap": 3, "timing": "onload", "method": "document", "type": "data provider", "id": 42000, "name": "Acxiom S2S provider tag"}, {"content": "", "target": null, "target_action": "append", "require": "", "docwrite": null, "template_replacement": 1, "execution_results": null, "tier": 1, "internal": 28, "content_type": "html", "freq_cap": 3, "timing": "onload", "method": "document", "type": "data provider", "id": 42001, "name": "IXI Digital Open Market provider tag"}, {"content": "", "target": null, "target_action": "append", "require": "", "docwrite": null, "template_replacement": 1, "execution_results": null, "tier": 1, "internal": 19, "content_type": "html", "freq_cap": 3, "timing": "onload", "method": "document", "type": "data provider", "id": 42002, "name": "Nielsen (via Exelate) provider tag"}, {"content": "", "target": null, "target_action": "append", "require": "", "docwrite": null, "template_replacement": 1, "execution_results": null, "tier": 1, "internal": 12, "content_type": "html", "freq_cap": 3, "timing": "onload", "method": "document", "type": "data provider", "id": 42003, "name": "Visual DNA provider tag"}, {"content": "", "target": null, "target_action": "append", "require": "", "docwrite": null, "template_replacement": 1, "execution_results": null, "tier": 1, "internal": 11, "content_type": "html", "freq_cap": 3, "timing": "onload", "method": "document", "type": "data provider", "id": 42004, "name": "eXelate Media provider tag"}, {"content": "", "target": null, "target_action": "append", "require": "", "docwrite": null, "internal": 1, "template_replacement": 1, "execution_results": null, "tier": 1, "library_tag_config": {}, "content_type": "html", "timing": "onload", "method": "document", "type": "library", "id": 35367, "name": "Krux Track Social"}, {"content": "", "target": null, "target_action": "append", "require": "", "docwrite": null, "template_replacement": 1, "execution_results": null, "tier": 1, "internal": 6, "content_type": "html", "freq_cap": 3, "timing": "onload", "method": "document", "type": "data provider", "id": 35368, "name": "Technographic Data provider tag"}, {"content": "", "target": null, "target_action": "append", "require": "", "docwrite": null, "template_replacement": 1, "execution_results": null, "tier": 1, "internal": 14, "content_type": "html", "freq_cap": 3, "timing": "onload", "method": "document", "id": 35369, "name": "Krux Geographic Data provider tag"}, {"content": "", "target": "", "target_action": null, "require": "", "docwrite": null, "template_replacement": 1, "execution_results": {"onloadSafe": true, "docwrite": false, "listeners": []}, "tier": 1, "internal": 1, "content_type": "html", "freq_cap": 3, "timing": "onload", "method": "document", "type": "publisher", "id": 43429, "name": "AppNexus Connect Pixel"}, {"content": "", "target": "", "target_action": null, "require": "", "docwrite": null, "template_replacement": 1, "execution_results": {"onloadSafe": true, "docwrite": false, "listeners": []}, "tier": 1, "internal": false, "content_type": "html", "timing": "onload", "method": "document", "type": "publisher", "id": 41179, "name": "section, subsection"}, {"content": "", "target": "", "target_action": null, "require": "", "docwrite": null, "template_replacement": 1, "execution_results": {"onloadSafe": true, "docwrite": false, "listeners": []}, "tier": 1, "internal": false, "content_type": "html", "timing": "onload", "method": "document", "type": "publisher", "id": 41180, "name": "DTC NextGen"}, {"content": "", "target": "", "target_action": null, "require": "", "docwrite": null, "template_replacement": 1, "execution_results": null, "tier": 1, "internal": 1, "content_type": "html", "freq_cap": 3, "timing": "onload", "method": "document", "type": "publisher", "id": 39151, "name": "MediaMath UserMatching"}], "segments": [], "publisher": {"uuid": "2196ddf0-947c-45ec-9b0d-0a82fb280cb8", "id": 12310, "name": "Guardian"}, "controltag_options": {"async": "true", "render": true}, "site": {"id": 18680, "name": "Guardian NextGen"}, "dnt": null, "params": {"connector_host": "connector.krxd.net", "control_tag_load_sync": "false", "fingerprint": false, "disable_http_compression": false, "remove_kxhead": true, "supertag_requires_approval": false, "config_source": 1, "control_tag_stats_prefix": null, "beacon_host": "beacon.krxd.net", "control_tag_pixel_throttle": "100", "user_id_cookie": null, "max_segments": null, "no_pii": 0, "recommend": false, "revenue_optimization": false, "context_terms": "false", "jslog_host": "jslog.krxd.net", "site_level_supertag_config": "site", "max_slot_time": 1000, "services_host": "apiservices.krxd.net", "capture_leakage": true, "client_side_storage": "localStorage,cookie", "userData_host": "cdn.krxd.net", "control_tag_namespace": null, "control_tag_version": "stable", "capture_js_errors": "true", "datatag_version": "3", "target_fingerprint": false}, "services": {"impression": "//beacon.krxd.net/ad_impression.gif", "stats": "//apiservices.krxd.net/stats", "log": "//jslog.krxd.net/jslog.gif", "userData": "//cdn.krxd.net/user_data/segments/3", "um": "//apiservices.krxd.net/um", "optout": "//beacon.krxd.net/optout_check", "pixel": "//beacon.krxd.net/pixel.gif", "contentConnector": "//connector.krxd.net/content_connector/", "is_optout": "//beacon.krxd.net/optout_check", "set_optin": "//apiservices.krxd.net/consumer/optin", "social": "//beacon.krxd.net/social.gif", "set_optout": "//apiservices.krxd.net/consumer/optout", "data": "//beacon.krxd.net/data.gif", "event": "//beacon.krxd.net/event.gif"}, "geo": {}, "realtime_segments": [], "confid": "JVZiE3vn"}; // Wrap in a function and comment, then toString the func and replace // everything that's not the beginning or end of a JSON object, so we get a // string that's either empty or JSON. var esiGeo = String(function(){/* */}).replace(/^.*\/\*[^{]+|[^}]+\*\/.*$/g, ''); if (esiGeo) { config.geo = esiGeo; } Krux('config', config); }; // ControlTag simply crashes when opening a website from Twitter browser on // iOS, temporarily disable CT when Twitter for iPhone is detected until they // fix this (works fine with other twitter client though) if (/Twitter for iPhone/.test(window.navigator.userAgent || '')) return; loadCT( "//cdn.krxd.net/ctjs/controltag.js.f99670595ccd46c65a517672ea749179", loadConfig ); })();