function isSet(val) { switch (typeof val) { case "string": return val !== undefined && val !== "" && val !== null; case "object": return val !== null; case "number": case "boolean": return true; default: return false; } } function isJSONSupported() { return !!(window.JSON && (window.JSON.parse && typeof JSON.parse === "function") && (window.JSON.stringify && typeof JSON.stringify === "function")); } //------------------------------------------CODE------------------------------------------ function isForceSafeFrameEnabled() { return testData["fs"] === "1" } function decodeFSC(input) { // Replace non-url compatible chars with base64 standard chars input = input .replace(/-/g, '+') .replace(/_/g, '/'); return input; } let timesData = {uCreativeLoadStart: Date.now()}; let isDebuggingLogFired = false; function onLoadHandler() { timesData["dfpIframeLoadTime"] = Date.now(); fireDebuggingLog(); } if (window.addEventListener) { window.addEventListener("load", onLoadHandler); } else if (window.attachEvent) { window.attachEvent("onload", onLoadHandler); } const DEBUG_LOG_TIMEOUT = 10000; setTimeout(fireDebuggingLog, DEBUG_LOG_TIMEOUT); try { var testData = parseTestData(); timesData["bidId"] = getBidId(); if (hbTargetingParams.ct === "2") { var rtcHost = "amprtc.media.net"; if (isJSONSupported() && typeof atob === "function" && isSet(hbTargetingParams.mnetfsc)) { try { var decodedMnetFSC = decodeFSC(hbTargetingParams.mnetfsc); var dS = JSON.parse(atob(decodedMnetFSC)).admHost; if (isSet(dS)) { rtcHost = dS; } } catch (e) { (new Image()).src = "https://lg1.hb.yahoo.net/log?logid=kfk&evtid=projectevents&project=amprtc_error&event=AMPRTC_UCREATIVE_ERROR&rd=" + document.referrer + "|" + e.message; } } var rtcAdUrl = "https://" + rtcHost + "/rtb/getadm?as=1&aid=" + hbTargetingParams.auctionId + "&bid=" + hbTargetingParams.bidder + "&cid=" + hbTargetingParams.cid + "&slot=" + hbTargetingParams.crid + "&act=" + hbTargetingParams.auctionType + "&scpvid=" + hbTargetingParams.secondProviderId + "&mnetfsc=" + hbTargetingParams.mnetfsc;//jscs:ignore var ifr = document.createElement("iframe"); var size = hbTargetingParams.size.split('x'); ifr.setAttribute("width", size[0]); ifr.setAttribute("height", size[1]); ifr.setAttribute("frameBorder", "0"); ifr.setAttribute("marginWidth", "0"); ifr.setAttribute("marginHeight", "0"); ifr.setAttribute("scrolling", "no"); ifr.setAttribute("allowtransparency", "true"); ifr.src = rtcAdUrl; document.body.appendChild(ifr); } else if (hbTargetingParams.auctionId && window.parent.advBidxc) { var shouldForceSafeFrame = isForceSafeFrameEnabled(); if (shouldForceSafeFrame) { throw new Error("Forcing Safe Frame"); } window.parent.advBidxc.deliverImpression({ frameWindow: window, crid: hbTargetingParams.crid, auctionId: hbTargetingParams.auctionId, bidder: hbTargetingParams.bidder, isExternal: hbTargetingParams.isExternal, isPmp: hbTargetingParams.isPmp, customObj: hbCustomParams }); } else { throw new Error(); } } catch (e) { function handleSafeFrame(event) { timesData["bidexToUCreativeMsgRcvd"] = Date.now(); try { if (!(isSet(event) && isSet(event.data) && isSet(event.data.isMnetHB))) { return; } timesData["bidexToUCreativeMsgSent"] = event.data.bxToUCrtMsgSnt || -1; timesData["uCreativeToBidexMsgRcvd"] = event.data.uCrtToBxMsgRcvd || -1; if (!(isSet(event.data.adCode) && isSet(event.data.width) && isSet(event.data.height))) { throw new Error("improper response from advBidxc"); } var ifr = document.createElement("iframe"); ifr.setAttribute("width", event.data.width); ifr.setAttribute("height", event.data.height); ifr.setAttribute("frameBorder", "0"); ifr.setAttribute("marginWidth", "0"); ifr.setAttribute("marginHeight", "0"); ifr.setAttribute("scrolling", "no"); ifr.setAttribute("allowtransparency", "true"); if (event.data.isMultiBid) { // To restrict the adcode to resize the iframe size const style = document.createElement("style"); style.innerHTML = ".do-not-modify-ads {height:" + event.data.height + "px !important; }"; document.head.appendChild(style); ifr.setAttribute("class", "do-not-modify-ads"); } document.body.appendChild(ifr); ifr.contentWindow.document.open(); ifr.contentWindow.document.write(event.data.adCode); ifr.contentWindow.document.close(); timesData["adCodeRenderingEnded"] = Date.now(); window.parent.postMessage({ isMnetHB: 1, safeframeRenderSuccess: 1, isExt: hbTargetingParams.isExternal, bidder: hbTargetingParams.bidder, auctionId: hbTargetingParams.auctionId }, '*'); } catch (e) { (new Image()).src = protocol + domain + "/log?logid=kfk&evtid=belog&lvl=3&name=SAFEFRAME_RENDER_ERROR&cid=" + hbTargetingParams.cid + "&crid=" + hbTargetingParams.crid + "&pvid=" + hbTargetingParams.bidder + "&cc=" + hbTargetingParams.cc + "&ugd=" + hbTargetingParams.ugd + "&stack=" + encodeURIComponent((e.name || "") + "|" + (e.message || ""));//jscs:ignore } } if (window.addEventListener) { window.addEventListener("message", handleSafeFrame, false); } else if (window.attachEvent) { window.attachEvent("onmessage", handleSafeFrame); } timesData["uCreativeToBidexMsgSent"] = Date.now(); window.parent.postMessage({ isExt: hbTargetingParams.isExternal, isPmp: hbTargetingParams.isPmp, placement: hbTargetingParams.crid, bidder: hbTargetingParams.bidder, customParam: hbCustomParams, pageID: hbTargetingParams.auctionId, isMnetHB: 1 }, '*'); } function getBidId() { return testData["bidId"] || -1; } function isCreativeTimesLoggingEnabled() { return testData["crtTmsLgng"] } function parseTestData() { const testData = hbTargetingParams.testData; if (!isSet(testData)) { return {}; } const testDataObj = {}; testData.split("|").forEach((entry) => { const [key, value] = entry.split(":"); if (isSet(key) && isSet(value)) { testDataObj[key] = value; } }) return testDataObj; } function fireDebuggingLog() { if (!isDebuggingLogFired && isCreativeTimesLoggingEnabled()) { isDebuggingLogFired = true; (new Image()).src = protocol + domain + "/log?logid=kfk&evtid=belog&lvl=3" + "&name=" + "creative_times" + "&cid=" + hbTargetingParams.cid + "&crid=" + hbTargetingParams.crid + "&pvid=" + hbTargetingParams.bidder + "&cc=" + hbTargetingParams.cc + "&ugd=" + hbTargetingParams.ugd + "&bidId=" + getBidId() + "&stack=" + encodeURIComponent(JSON.stringify(timesData)); } }