CINXE.COM
Mobile App
<!DOCTYPE html> <html> <head><script type="text/javascript" src="/_static/js/bundle-playback.js?v=HxkREWBo" charset="utf-8"></script> <script type="text/javascript" src="/_static/js/wombat.js?v=txqj7nKC" charset="utf-8"></script> <script>window.RufflePlayer=window.RufflePlayer||{};window.RufflePlayer.config={"autoplay":"on","unmuteOverlay":"hidden"};</script> <script type="text/javascript" src="/_static/js/ruffle/ruffle.js"></script> <script type="text/javascript"> __wm.init("https://web.archive.org/web"); __wm.wombat("http://www.nbc.com/app_link/nbctve","20170120033629","https://web.archive.org/","web","/_static/", "1484883389"); </script> <link rel="stylesheet" type="text/css" href="/_static/css/banner-styles.css?v=S1zqJCYt" /> <link rel="stylesheet" type="text/css" href="/_static/css/iconochive.css?v=3PDvdIFv" /> <!-- End Wayback Rewrite JS Include --> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta charset="utf-8"><script type="text/javascript">window.NREUM||(NREUM={}),__nr_require=function(e,t,n){function r(n){if(!t[n]){var o=t[n]={exports:{}};e[n][0].call(o.exports,function(t){var o=e[n][1][t];return r(o||t)},o,o.exports)}return t[n].exports}if("function"==typeof __nr_require)return __nr_require;for(var o=0;o<n.length;o++)r(n[o]);return r}({1:[function(e,t,n){function r(){}function o(e,t,n){return function(){return i(e,[(new Date).getTime()].concat(u(arguments)),t?null:this,n),t?void 0:this}}var i=e("handle"),a=e(2),u=e(3),c=e("ee").get("tracer"),f=NREUM;"undefined"==typeof window.newrelic&&(newrelic=f);var s=["setPageViewName","setCustomAttribute","setErrorHandler","finished","addToTrace","inlineHit","addRelease"],l="api-",p=l+"ixn-";a(s,function(e,t){f[t]=o(l+t,!0,"api")}),f.addPageAction=o(l+"addPageAction",!0),f.setCurrentRouteName=o(l+"routeName",!0),t.exports=newrelic,f.interaction=function(){return(new r).get()};var d=r.prototype={createTracer:function(e,t){var n={},r=this,o="function"==typeof t;return i(p+"tracer",[Date.now(),e,n],r),function(){if(c.emit((o?"":"no-")+"fn-start",[Date.now(),r,o],n),o)try{return t.apply(this,arguments)}finally{c.emit("fn-end",[Date.now()],n)}}}};a("setName,setAttribute,save,ignore,onEnd,getContext,end,get".split(","),function(e,t){d[t]=o(p+t)}),newrelic.noticeError=function(e){"string"==typeof e&&(e=new Error(e)),i("err",[e,(new Date).getTime()])}},{}],2:[function(e,t,n){function r(e,t){var n=[],r="",i=0;for(r in e)o.call(e,r)&&(n[i]=t(r,e[r]),i+=1);return n}var o=Object.prototype.hasOwnProperty;t.exports=r},{}],3:[function(e,t,n){function r(e,t,n){t||(t=0),"undefined"==typeof n&&(n=e?e.length:0);for(var r=-1,o=n-t||0,i=Array(o<0?0:o);++r<o;)i[r]=e[t+r];return i}t.exports=r},{}],ee:[function(e,t,n){function r(){}function o(e){function t(e){return e&&e instanceof r?e:e?c(e,u,i):i()}function n(n,r,o){if(!p.aborted){e&&e(n,r,o);for(var i=t(o),a=v(n),u=a.length,c=0;c<u;c++)a[c].apply(i,r);var f=s[w[n]];return f&&f.push([y,n,r,i]),i}}function d(e,t){b[e]=v(e).concat(t)}function v(e){return b[e]||[]}function g(e){return l[e]=l[e]||o(n)}function m(e,t){f(e,function(e,n){t=t||"feature",w[n]=t,t in s||(s[t]=[])})}var b={},w={},y={on:d,emit:n,get:g,listeners:v,context:t,buffer:m,abort:a,aborted:!1};return y}function i(){return new r}function a(){(s.api||s.feature)&&(p.aborted=!0,s=p.backlog={})}var u="nr@context",c=e("gos"),f=e(2),s={},l={},p=t.exports=o();p.backlog=s},{}],gos:[function(e,t,n){function r(e,t,n){if(o.call(e,t))return e[t];var r=n();if(Object.defineProperty&&Object.keys)try{return Object.defineProperty(e,t,{value:r,writable:!0,enumerable:!1}),r}catch(i){}return e[t]=r,r}var o=Object.prototype.hasOwnProperty;t.exports=r},{}],handle:[function(e,t,n){function r(e,t,n,r){o.buffer([e],r),o.emit(e,t,n)}var o=e("ee").get("handle");t.exports=r,r.ee=o},{}],id:[function(e,t,n){function r(e){var t=typeof e;return!e||"object"!==t&&"function"!==t?-1:e===window?0:a(e,i,function(){return o++})}var o=1,i="nr@id",a=e("gos");t.exports=r},{}],loader:[function(e,t,n){function r(){if(!h++){var e=y.info=NREUM.info,t=l.getElementsByTagName("script")[0];if(setTimeout(f.abort,3e4),!(e&&e.licenseKey&&e.applicationID&&t))return f.abort();c(b,function(t,n){e[t]||(e[t]=n)}),u("mark",["onload",a()],null,"api");var n=l.createElement("script");n.src="https://"+e.agent,t.parentNode.insertBefore(n,t)}}function o(){"complete"===l.readyState&&i()}function i(){u("mark",["domContent",a()],null,"api")}function a(){return(new Date).getTime()}var u=e("handle"),c=e(2),f=e("ee"),s=window,l=s.document,p="addEventListener",d="attachEvent",v=s.XMLHttpRequest,g=v&&v.prototype;NREUM.o={ST:setTimeout,CT:clearTimeout,XHR:v,REQ:s.Request,EV:s.Event,PR:s.Promise,MO:s.MutationObserver},e(1);var m=""+location,b={beacon:"bam.nr-data.net",errorBeacon:"bam.nr-data.net",agent:"js-agent.newrelic.com/nr-1016.min.js"},w=v&&g&&g[p]&&!/CriOS/.test(navigator.userAgent),y=t.exports={offset:a(),origin:m,features:{},xhrWrappable:w};l[p]?(l[p]("DOMContentLoaded",i,!1),s[p]("load",r,!1)):(l[d]("onreadystatechange",o),s[d]("onload",r)),u("mark",["firstbyte",a()],null,"api");var h=0},{}]},{},["loader"]);</script> <title>Mobile App</title> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="canonical" href="https://web.archive.org/web/20170120033629/http://www.nbc.com/live"/> </head> <body> <style type="text/css"> body { margin: 0; text-align: center; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen-Sans", "Ubuntu", "Cantarell", "Helvetica Neue", sans-serif; } p { margin: 1em; } img { max-width: 100% } .hidden { display: none; } </style> <p class="app-store-badges"> <a id="app_link_platform_iphone" href="https://web.archive.org/web/20170120033629/http://c00.adobe.com/12a36ee3-5c48-4e12-a3bb-f9399f1eeddf/xo144hdr/i/442839435" class="hidden"> <img alt="Download from App Store" src="//web.archive.org/web/20170120033629im_/http://linkmaker.itunes.apple.com/images/badges/en-us/badge_appstore-lrg.png"> </a> <a id="app_link_platform_ipad" href="https://web.archive.org/web/20170120033629/http://c00.adobe.com/12a36ee3-5c48-4e12-a3bb-f9399f1eeddf/xo144hdr/i/442839435" class="hidden"> <img alt="Download from App Store" src="//web.archive.org/web/20170120033629im_/http://linkmaker.itunes.apple.com/images/badges/en-us/badge_appstore-lrg.png"> </a> <a id="app_link_platform_android" href="https://web.archive.org/web/20170120033629/http://c00.adobe.com/12a36ee3-5c48-4e12-a3bb-f9399f1eeddf/xo144hdr/g/com.nbcuni.nbc" class="hidden"> <img alt="Get it on Google Play" src="//web.archive.org/web/20170120033629im_/http://developer.android.com/images/brand/en_generic_rgb_wo_60.png"> </a> </p> <p><a href="https://web.archive.org/web/20170120033629/http://www.nbc.com/">Go to NBC</a></p> <script>/** * Determine platform based on userAgent, and redirect with it's respective data. * * You may set a before hook to run before * - It is expected that these hooks will accept a callback parameter. * @example * app_link.before = function(callback) { * setTimeout(function() { * callback(); * }, 1000); * }; * * @param {object:<platformKey:plaform>} platforms * Data about the App Link per platform. * - {string} platform.app_url * URL Scheme to the app. * - {string} platform.intent_url * Intent URL to the app. * - {string} platform.store_url * URL to find this app in the app store. * - {boolean} platform.supports_qs * True if the App URL supports appending a query-string * - {boolean} platform.supports_path * True if the App URL supports appending a path * - {array} platform.path_whitelist * RegExp strings to filter the query-string path by. * @param {string} fallbackUrl * The URL to route to if we cannot route another way. * * @return {string} * Primary URL that we will attempt to redirect to. */ function app_link (platforms, fallbackUrl) { var isRedirectPage = !!location.href.match("app_link_redirect=true"); // Set variables, allowing before hooks to alter. app_link.platforms = platforms; app_link.fallbackUrl = fallbackUrl; // Exexcute any before hooks. if (app_link.before && !isRedirectPage) { return app_link.before(function() { app_link.before = null; app_link(app_link.platforms, app_link.fallbackUrl); }); } // Add referrer to fallback (Server is unable to do this accurately). var platform = platforms.app_link_platform_fallback; if (platform && platform.supports_qs) { app_link.fallbackUrl = app_link.applyReferrer(app_link.fallbackUrl); } // Determine the user's platform. var platformKey = app_link.getPlatformKey(navigator.userAgent) || app_link.getPlatformKey(navigator.appVersion); platform = platforms[platformKey]; // Display correct store badge in case the redirect fails or user returns to page. var el = platformKey && document.getElementById(platformKey); if (el) { el.className = ""; } // Display correct app icon with link based on platform in case the redirect fails or user returns to page. var logoEl = platformKey && document.getElementById(platformKey + '_logo'); if (logoEl) { logoEl.className = ""; } // If we don't recognize the platform, or have data about the platform -- fallback. if (!platform) { return app_link.fallback(); } // Transform App Urls according to rules. var appUrl = app_link.transformUrl(platform.app_url, platform.supports_qs, platform.supports_path, platform.path_whitelist); var intentUrl = app_link.transformUrl(platform.intent_url, platform.supports_qs, platform.supports_path, platform.path_whitelist); // We have a platform, update fallback to be the store. app_link.fallbackUrl = app_link.transformUrl(platform.store_url, platform.supports_store_qs) || fallbackUrl; var UA = navigator.userAgent; // Android w/ Chrome must use Intents if (platformKey === 'app_link_platform_android' && UA.match(/Chrome/)) { return app_link.directOrIframe(intentUrl); } // Firefox likes direct. else if (platformKey === 'app_link_platform_android' && UA.match(/Firefox/)) { return app_link.directOrIframe(appUrl); } // iOS9 needs middle redirect and confirm handling. // The dialog flow is not pretty - sorry. else if ((platformKey === 'app_link_platform_iphone' || platformKey === 'app_link_platform_ipad') && app_link.getOS(UA) >= 9) { if (isRedirectPage) { return app_link.fallback(); } else { return app_link.ios9(appUrl); } } // iOS8 Chrome prefers directOrIframe trick. else if((platformKey === 'app_link_platform_iphone' || platformKey === 'app_link_platform_ipad') && UA.match(/CriOS/)) { return app_link.directOrIframe(appUrl); } // Most iOS & Android: Prefers hidden iframe trick over direct. else { return app_link.iframe(appUrl); } } /** * Detecting user's platform (their device / operating-system). * * @param {string} UA * Browser userAgent or appVersion (Sometimes we need the version info). * * @return {string} * A key to App Link platforms data that matches user's platform. */ app_link.getPlatformKey = function (UA) { return ( UA.match(/Windows Phone/i) ? 'app_link_platform_windows_phone' : UA.match(/Kindle/i) ? 'app_link_platform_kindle_fire' : UA.match(/Android/i) ? 'app_link_platform_android' : UA.match(/iPhone|iPod/i) ? 'app_link_platform_iphone' : UA.match(/iPad/i) ? 'app_link_platform_ipad' : (UA.match(/Windows NT/) && app_link.getOS(UA) >= 6.2) ? 'app_link_platform_windows' : (UA.match(/OS X/) && app_link.getOS(UA) >= 10.6) ? 'app_link_platform_mac' : '' ); }; /** * Detect version of OS operating system. * * @param {string} UA * Browser userAgent or appVersion. * * @return {number} * Representing version of operating system. */ app_link.getOS = function (UA) { var version; // Windows version = UA.match(/Windows NT (\d+?.\d+?)/i); if (version) { return version[1] - 0; } // Mac & iOS version = UA.match(/(iPhone.+OS|iPad.+OS|iPod.+OS|OS X) (\d+?[._]\d+?)/i); if (version) { return version[2].replace('_', '.') - 0; } return 0; } /** * Transform a given URL URL. * - Optionally, appending any path with one specified in the path query string. * - Optionally, appending any query-sting. * * @param {string} url * The URL to trnasform * @param {boolean} applyQs * True if the App URL supports appending a query-string * @param {boolean} applyPath * True if the App URL supports appending a path * @param {array} pathWhitelist * RegExp strings to filter the query-string path by. * * @return {string} * The transformed URL. */ app_link.transformUrl = function (url, applyQs, applyPath, pathWhitelist) { if (url && applyPath) { var path = app_link.getQueryParams().path; if (app_link.isPathWhitelisted(path, pathWhitelist)) { url = app_link.applyUrl(url, {pathname: path}); } } if (url && applyQs) { // Pass-Through Query-String values. url = app_link.applyUrl(url, {search: location.search}); // Attempt to set a referrer. url = app_link.applyReferrer(url); } return url; }; /** * Validate that path matches at least one regular expression in a whitelist. * * @param {string} path * The path to validate. * @param {array} whitelist * An array of regular expression strings. * * @return {boolean} * True if a match is found or if whitelist is empty. False otherwise. */ app_link.isPathWhitelisted = function (path, whitelist) { // We must have something to work with. if (!path) { return false; } // If there are no paths to white-list, everything is accepted. if (!whitelist || !whitelist.length) { return true; } // Check each item for a RegEx match. for (var i = 0, item, rx; i < whitelist.length; i++) { // Remove carriage return character (\r) if any from whitelist item. item = whitelist[i].replace(/\r/g, ''); rx = new RegExp(item); if (rx.test(path)) { return true; } } return false; }; /** * Parse Query String parameters. * * @return {object<key:value>} * A map of key values from the query string. */ app_link.getQueryParams = function () { var query = {}; (location.search || "") // Remove the "?" .substr(1) // Replace space characters .replace(/\+/g, " ") // Grab key-value pairs .replace(/([^&;=]+)=?([^&;]*)/g, function (m, k, v) { // Decode keys and values separately query[decodeURIComponent(k)] = decodeURIComponent(v); }); return query; }; /** * Attaches the referrer to a destination URL. * * @param {string} url * The URL to apply transformation. * * @return {string} * The transformed URL. */ app_link.applyReferrer = function (url) { if (url && document.referrer && url.indexOf("referrer") === -1) { return app_link.applyUrl(url, {search: "referrer=" + encodeURIComponent(document.referrer)}); } return url; }; /** * Apply a query-string to a destination URL. * * @param {string} url * The URL to apply transformation. * @param {object} parts * - {string} pathname: Path to append. * - {string} search: Query String to append. * - {string} hash: Hash String to replace. * * @return {string} * The transformed URL. */ app_link.applyUrl = function (url, parts) { var parser = document.createElement("a"); parser.href = url; if (typeof parts.pathname === "string") { var origin = parser.origin || (parser.protocol + "//" + (parser.host || "")); var pathname = parser.pathname.replace(/^\/+/, "") + parts.pathname.replace(/^\/+/, ""); var search = parser.search; var hash = parser.hash; if (origin[origin.length - 1] !== "/") { origin += "/"; } parser.href = origin + pathname; if (search) { parser.search = search; } if (hash) { parser.hash = hash; } } if (typeof parts.search === "string") { if (parts.search[0] === "?") { parts.search = parts.search.slice(1); } parser.search = (parser.search && parts.search) ? parser.search + "&" + parts.search : (parser.search || parts.search); } if (typeof parts.hash === "string") { parser.hash = parts.hash; } return parser.href; }; /** * The browser doesn't tell us if we were successful or not. * Keep a heartbeat to see if the page is still visible. * * @param {function} callback * Called when we failed to do what was exected. * @param {number} wait * Number of Milliseconds before redirecting failure case */ app_link.onFailure = function (callback, wait) { var timerFailed = setTimeout(callback, wait || 2000); // If we know the page is hidden, then we did not fail. // Cancel the failure and attempt to close out. var timerHeartbeat = setInterval(function () { if (document.webkitHidden || document.hidden) { clearInterval(timerHeartbeat); clearTimeout(timerFailed); window.close(); } }, 100); }; /** * Redirect. If it fails, try iframe trick. * * @param {string} url * The URL to direct to. * * @return {string} * The URL directed to. */ app_link.directOrIframe = function (url) { if (!url) { return app_link.fallback(); } // If we're still here, try the iframe trick. var timerFailed = setTimeout(function () { if (document.webkitHidden || document.hidden) { clearTimeout(timerFailed); window.close(); } else { app_link.iframe(url); } }, 30000); document.location = url; return url; }; /** * Redirect. If it fails, redirect to temp page with the store. * * @param {string} url * The URL to direct to. * * @return {string} * The URL directed to. */ app_link.ios9 = function (url) { if (!url) { return app_link.fallback(); } // Need a timeout for images to successfully load. setTimeout(function() { // If we're still here, try the iframe trick. app_link.onFailure(function() { // The secondary redirect must be to http - not ios9 app store. if (app_link.fallback.substr(0, 4) !== 'http') { var href = location.href; document.location = href + (href.match(/\?/) ? "&" : "?") + "app_link_redirect=true"; } else { document.location = app_link.fallback; } }, 30000); document.location = url; }, 500); return url; }; /** * A lot of Androids, like the hidden iframe trick. * * @param {string} url * The URL to direct to. * * @return {string} * The URL directed to. */ app_link.iframe = function (url) { if (!url) { return app_link.fallback(); } // If we're still here, then give up and go to fallback. app_link.onFailure(app_link.fallback); var iframe = document.createElement("iframe"); iframe.style.border = "none"; iframe.style.width = "1px"; iframe.style.height = "1px"; iframe.onload = app_link.fallback; iframe.onerror = app_link.fallback; iframe.src = url; document.body.appendChild(iframe); return url; }; /** * Fallback if they don't have app installed. * Unless, PageVisiblityAPI has hidden the page. */ app_link.fallback = function () { if (!document.webkitHidden && !document.hidden) { // Removing query string from fallbackUrl. app_link.fallbackUrl = app_link.fallbackUrl.split("?")[0]; window.location = app_link.fallbackUrl; return app_link.fallbackUrl; } else { window.close(); } return ""; }; </script> <script> <!--//--><![CDATA[//><!-- mixpanel_flat_q=window.mixpanel_flat_q||[];mixpanel_flat_q.push(["952fc4e1a5cf40a16e840dc85932a615",{"loaded":"nbc_applink_mixpanel_track"}]) //--><!]]> </script> <script src="https://web.archive.org/web/20170120033629js_/http://www.nbc.com/sites/nbcunbc/files/files/js/js_DuD3UE6lh1GfZF1tpxY7KLx7DYBkmaqBxcsmNZERJ7A.js"></script> <script> var PLATFORMS = {"app_link_platform_windows_phone":{"app_url":"","store_url":"","supports_qs":0,"supports_path":0,"path_whitelist":[]},"app_link_platform_iphone":{"app_url":"nbctve:\/\/live","store_url":"https:\/\/web.archive.org\/web\/20170120033629\/http:\/\/c00.adobe.com\/12a36ee3-5c48-4e12-a3bb-f9399f1eeddf\/xo144hdr\/i\/442839435","supports_qs":0,"supports_path":0,"path_whitelist":[]},"app_link_platform_kindle_fire":{"app_url":"nbctve:\/\/live","store_url":"","supports_qs":0,"supports_path":0,"path_whitelist":[]},"app_link_platform_fallback":{"fallback_url":"https:\/\/web.archive.org\/web\/20170120033629\/http:\/\/www.nbc.com\/live","supports_qs":0,"supports_path":0,"path_whitelist":[]},"app_link_platform_ipad":{"app_url":"nbctve:\/\/live","store_url":"https:\/\/web.archive.org\/web\/20170120033629\/http:\/\/c00.adobe.com\/12a36ee3-5c48-4e12-a3bb-f9399f1eeddf\/xo144hdr\/i\/442839435","supports_qs":0,"supports_path":0,"path_whitelist":[]},"app_link_platform_android":{"app_url":"nbctve:\/\/live","intent_url":"intent:\/\/live#Intent;scheme=nbctve;package=com.nbcuni.nbc;end","store_url":"https:\/\/web.archive.org\/web\/20170120033629\/http:\/\/c00.adobe.com\/12a36ee3-5c48-4e12-a3bb-f9399f1eeddf\/xo144hdr\/g\/com.nbcuni.nbc","supports_qs":0,"supports_path":0,"path_whitelist":[]}}; var FALLBACK_URL = "https:\/\/web.archive.org\/web\/20170120033629\/http:\/\/www.nbc.com\/live"; app_link(PLATFORMS, FALLBACK_URL); </script> <script type="text/javascript">window.NREUM||(NREUM={});NREUM.info={"beacon":"bam.nr-data.net","licenseKey":"fb1e76f207","applicationID":"19466115","transactionName":"bgdTMhRZWhcAAkZYWldNcAUSUVsKTgBCQWpVC18NOVpbEQ8CVw==","queueTime":0,"applicationTime":140,"atts":"QkBQRFxDSRk=","errorBeacon":"bam.nr-data.net","agent":""}</script></body> </html> <!-- FILE ARCHIVED ON 03:36:29 Jan 20, 2017 AND RETRIEVED FROM THE INTERNET ARCHIVE ON 07:58:08 Dec 13, 2024. JAVASCRIPT APPENDED BY WAYBACK MACHINE, COPYRIGHT INTERNET ARCHIVE. ALL OTHER CONTENT MAY ALSO BE PROTECTED BY COPYRIGHT (17 U.S.C. SECTION 108(a)(3)). --> <!-- playback timings (ms): captures_list: 0.645 exclusion.robots: 0.032 exclusion.robots.policy: 0.019 esindex: 0.013 cdx.remote: 40.289 LoadShardBlock: 204.747 (3) PetaboxLoader3.datanode: 245.959 (4) load_resource: 174.514 PetaboxLoader3.resolve: 68.819 -->