const adsUtils = { isMobile() { return window.navigator.userAgent.match( /(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|Symbian|Windows Phone)/i); }, loadJsAsync(src, async, attribute) { return new Promise((resolve, reject) => { const script = document.createElement("script"); script.src = src; script.async = async; if (attribute) { for (const key in attribute) { script.setAttribute(key, attribute[key]); } } const onload = () => { script.removeEventListener("load", onload); resolve(); }; script.addEventListener("load", onload); script.addEventListener("error", (err) => { script.removeEventListener("load", onload); console.error("loading js error: ", src, err); reject(new Error(`Failed to load ${src}`)); }); (document.getElementsByTagName("head")[0] || document.documentElement).appendChild(script); }); }, }; const adsObj = { googleAdSense: { ifLoadScript: false, loadScript({ adClientId, callbackFunc, propertyObj }) { if (!this.ifLoadScript) { const ADSENSE_URL = `https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js${adClientId ? '?client=' + adClientId : ''}`; adsUtils.loadJsAsync(ADSENSE_URL, true, { crossorigin: "anonymous", ...propertyObj }).then(() => { console.info("===> google ads sdk loaded"); this.ifLoadScript = true; callbackFunc && (callbackFunc instanceof Function) && callbackFunc(); }).catch((e) => { console.error(e); }); } }, displayAd() { (window.adsbygoogle = window.adsbygoogle || []).push({}); }, dealGoogleAdSize(ifLandscape) { const inses = document.querySelectorAll("ins.pageCtx_adsbygoogle"); if (inses && inses.length) { const insArray = Array.from(inses); if (insArray) { const size = { width: `300px`, height: `250px` } const width = window.innerWidth; if (width >= 340 || ifLandscape) { size.width = "336px"; size.height = "280px"; } insArray.forEach(insEle => { insEle.style.height = size.height; insEle.style.width = size.width; }) } } } }, adxAd: { ifLoadScript: false, loadScript({ adUnits, callbackFunc }) { if (!this.ifLoadScript) { const url = `https://securepubads.g.doubleclick.net/tag/js/gpt.js`; return adsUtils.loadJsAsync(url, true).then(() => { console.info("---> adx ads sdk loaded"); this.ifLoadScript = true; window.googletag = window.googletag || { cmd: [] }; const scriptEle = document.createElement("script"); scriptEle.text = this.defineAdUnitSlots(adUnits); document.getElementsByTagName("head")[0].appendChild(scriptEle); callbackFunc && (callbackFunc instanceof Function) && callbackFunc(); return this.ifLoadScript; }).catch((e) => { console.error(e); }); } else { return Promise.resolve(this.ifLoadScript); } }, showAd(type, ...params) { switch (type) { case 'banner2': this.showCommonAd2(...params); break; case 'banner3': this.showCommonAd3(...params); break; case 'zm': this.showCommonAd(...params); break; case 'mm': this.showMM(...params); break; case 'adsense': case 'cz_adx': this.showAdsense(...params); break; case 'anchor': this.showAnchor(...params); break; default: console.log('Invalid Params'); break; } }, insertElement(clsId, e) { const bannerAdDiv = document.querySelector(clsId); var tmp = document.createDocumentFragment(); const adv = document.createElement("div"); adv.className = "adv"; const p = document.createElement("p"); p.className = "ad-tips-top"; p.innerText = "Advertisement"; adv.appendChild(p) adv.appendChild(e); tmp.appendChild(adv); bannerAdDiv.appendChild(tmp); }, showMM(domain, ...params) { for (let i = 0; i < params.length; i++) { let adUnit = params[i]; let clsId = adUnit.clsId; let slotId = adUnit.slotId; const e = document.createElement('pubguru'); e.setAttribute('data-pg-ad', slotId); this.insertElement(clsId, e); } let jsArr = [{ src: `//c.pubguru.net/${domain}.js`, type: 'text/javascript', async: "true" }]; this.loadJsScript(jsArr); }, showAdsense(...val) { let clsId = val[0]; let clientId = val[1]; let soltId = val[2]; let params = { adClientId: clientId, callbackFunc: adsObj.googleAdSense.displayAd } const bannerAdDiv = document.querySelector(clsId); var tmp = document.createDocumentFragment(); const adv = document.createElement("div"); adv.className = "adv"; const p = document.createElement("p"); p.className = "ad-tips-top"; p.innerText = "Advertisement"; adv.appendChild(p) const adIns = document.createElement('ins'); adIns.style.display = 'block'; adIns.setAttribute('class', 'adsbygoogle'); adIns.setAttribute('data-ad-client', clientId); adIns.setAttribute('data-ad-slot', soltId); adIns.setAttribute('data-ad-format', 'auto'); adIns.setAttribute('data-full-width-responsive', 'true'); adv.appendChild(adIns); tmp.appendChild(adv); bannerAdDiv.appendChild(tmp); adsObj.googleAdSense.loadScript(params) }, showAnchor(...val) { let adUnit = val[0]; window.googletag = window.googletag || {cmd: []}; var anchorSlot; googletag.cmd.push(function() { anchorSlot = googletag.defineOutOfPageSlot(adUnit, googletag.enums.OutOfPageFormat.BOTTOM_ANCHOR); anchorSlot.addService(googletag.pubads()); googletag.pubads().enableSingleRequest(); googletag.enableServices(); googletag.display(anchorSlot); }); }, showCommonAd(...params) { const gameboxHeadAdOptions = { "adUnitCode": params[0], "elementId": params[1], "size": [300, 250] }; const adUnits = [{ adUnitCode: gameboxHeadAdOptions.adUnitCode, size: gameboxHeadAdOptions.size || [300, 250], elementId: gameboxHeadAdOptions.elementId || "div-gpt-ad-1" }]; if (params.length > 2) { adUnits.push({ adUnitCode: params[2], type: "INTERSTITIAL", }); } adsObj.adxAd.loadScript({ adUnits: adUnits }).then(flag => { if (flag) { adsObj.adxAd.addAdToContainer( gameboxHeadAdOptions.elementId || "div-gpt-ad-1", ".banner-ad", false, { style: 'min-width:300px;min-height:250px;text-align:center;margin-bottom:8px;' } ); } }); }, //banner2 ???? showCommonAd2(...params) { const gameboxHeadAdOptions = { "adUnitCode": params[0], "elementId": params[1], "size": [300, 250] }; const adUnits = [{ adUnitCode: gameboxHeadAdOptions.adUnitCode, size: gameboxHeadAdOptions.size || [300, 250], elementId: gameboxHeadAdOptions.elementId || "div-gpt-ad-2" }]; adsObj.adxAd.loadScript({ adUnits: adUnits }).then(flag => { if (flag) { adsObj.adxAd.addAdToContainer( gameboxHeadAdOptions.elementId || "div-gpt-ad-2", ".banner2-ad", false, { style: 'min-width:300px;min-height:250px;text-align:center;margin-bottom:8px;' } ); } }); }, //banner3 ???? showCommonAd3(...params) { const gameboxHeadAdOptions = { "adUnitCode": params[0], "elementId": params[1], "size": [300, 250] }; const adUnits = [{ adUnitCode: gameboxHeadAdOptions.adUnitCode, size: gameboxHeadAdOptions.size || [300, 250], elementId: gameboxHeadAdOptions.elementId || "div-gpt-ad-3" }]; adsObj.adxAd.loadScript({ adUnits: adUnits }).then(flag => { if (flag) { adsObj.adxAd.addAdToContainer( gameboxHeadAdOptions.elementId || "div-gpt-ad-3", ".banner3-ad", false, { style: 'min-width:300px;min-height:250px;text-align:center;margin-bottom:8px;' } ); } }); }, loadJsScript(jsObjArr) { if (jsObjArr && jsObjArr.length > 0) { for (let js of jsObjArr) { adsUtils.loadJsAsync(js.src, true, js) } } }, addJsCodeToHead(jsCode) { const scriptEle = document.createElement("script"); scriptEle.text = jsCode; document.getElementsByTagName("head")[0].appendChild(scriptEle); }, addAdToContainer(id, containerId, propertyObj) { const adEle = document.createElement("div"); adEle.setAttribute("id", id); if (propertyObj) { for (const key in propertyObj) { if (Object.hasOwnProperty.call(propertyObj, key)) { const value = propertyObj[key]; adEle.setAttribute(key, value); } } } const scriptEle = document.createElement("script"); scriptEle.text = `googletag.cmd.push(function() { googletag.display('${id}'); });` adEle.appendChild(scriptEle); const containerEle = document.querySelector(`${containerId}`); if (containerEle) { const p = document.createElement("p"); p.className = "ad-tips-top"; p.innerText = "Advertisement"; containerEle.appendChild(p) const adv = document.createElement("div"); adv.className = "adv"; adv.appendChild(adEle); containerEle.appendChild(adv); } return Promise.resolve(adEle); }, defineAdUnitSlots(adUnits = []) { const notDislayTypes = ['INTERSTITIAL', 'TOP_ANCHOR', 'BOTTOM_ANCHOR']; const outOfPageAdUnits = adUnits.filter(adUnit => notDislayTypes.includes(adUnit.type)); const displayAdUnits = adUnits.filter(adUnit => !notDislayTypes.includes(adUnit.type)); const outOfPageSlotStr = outOfPageAdUnits.map((adUnit, index) => { return ` const outOfPageSlot_${index} = googletag.defineOutOfPageSlot( '${adUnit.adUnitCode}', googletag.enums.OutOfPageFormat['${adUnit.type}']); if (outOfPageSlot_${index}) { outOfPageSlot_${index}.addService(googletag.pubads()); } ` }).join('\n') const slotStr = displayAdUnits.map(adUnit => { if (!(adUnit.adUnitCode && adUnit.size && adUnit.elementId)) { return ''; } return `googletag.defineSlot( "${adUnit.adUnitCode}", ${JSON.stringify(adUnit.size)}, "${adUnit.elementId}").addService(googletag.pubads());`; }).join('\n') return `googletag.cmd.push(function() { ${outOfPageSlotStr} ${slotStr} googletag.pubads().enableSingleRequest(); googletag.pubads().collapseEmptyDivs(); googletag.enableServices(); })` }, } } jQuery(document).ready(function() {});