var fp = null; var fcp = null; var lcp = null; var ndaction = null; // 获取对应链接 function getPlatformUrl(str, appid) { var links = { 683003001: { iOSUrl: 'https://apps.apple.com/cn/app/id6737598824', androidUrl: 'market://details?id=com.cd.bestreels', }, 683002001: { iOSUrl: 'https://apps.apple.com/cn/app/id6502931639', androidUrl: 'market://details?id=com.changdu.moboshort', }, } var u = navigator.userAgent, isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/), url = links[appid].iOSUrl; if (!isiOS) { copyToClipboard(str); url = links[appid].androidUrl + '&referrer=' + encodeURIComponent(encodeURIComponent(str)); } return url; } //获取指定名称的cookie的值 function getCookie(key) { var arrstr = document.cookie.split('; '); for (var i = 0; i < arrstr.length; i++) { var temp = arrstr[i].split('='); if (temp[0] == key) return unescape(temp[1]); } } //获取url参数 function getUrlVariable(variable) { var query = window.location.search.substring(1); var vars = query.split('&'); for (var i = 0; i < vars.length; i++) { var pair = vars[i].split('='); if (pair[0] == variable) { if (variable === 'adid' && pair[1] === '{{adid}}') { return getUrlVariable('rawadid') || '{{adid}}'; } return pair[1]; } } return false; } // 复制到剪切板 function copyToClipboard(str) { try { var el = document.createElement('textarea'); el.value = str; el.setAttribute('readonly', ''); el.style.position = 'absolute'; el.style.left = '-9999px'; document.body.appendChild(el); var selected = document.getSelection().rangeCount > 0 ? document.getSelection().getRangeAt(0) : false; el.select(); document.execCommand('copy'); document.body.removeChild(el); if (selected) { document.getSelection().removeAllRanges(); document.getSelection().addRange(selected); } } catch (e) { try { window.clipboardData && window.clipboardData.setData("text", str); } catch (err) { console.error("window.clipboardData was unsuccessful", err) } } } function copyNDAction(ndaction) { if (navigator.clipboard && navigator.permissions) { navigator.clipboard.writeText(ndaction) .catch((e) => { copyToClipboard(ndaction) }) } else { copyToClipboard(ndaction) } } // 转URL参数 function parseParams(data) { try { var tempArr = []; for (var i in data) { var key = encodeURIComponent(i); var value = encodeURIComponent(data[i]); tempArr.push(key + '=' + value); } var urlParamsStr = tempArr.join('&'); return urlParamsStr; } catch (err) { return ''; } } var sensors = window.sensorsDataAnalytic201505 || { init: function () { }, login: function () { }, registerPage: function () { }, track: function () { } }, current_url = window.location.href.replace(/{/g, '<').replace(/}/g, '>'); sensors.init({ server_url: 'https://log2.51changdu.com/api/projectevent?project=event_log&remark=online', show_log: false, name: 'sensors', send_type: 'ajax', app_js_bridge: true, max_string_length: 999999999999, app_flush_interval: 15000, app_flush_bulkSize: 100, app_flush_network_policy: 30, app_session_interval_time: 30000, app_data_collect: true, datasend_timeout: 2000, //一次请求超过多少毫秒的话自动取消,防止请求无响应。 }); var track = function(e, r, isRetry = 0) { if(!location.origin.includes('bestreels.com') && !location.origin.includes('moboshort.com')){ return false } try { var conditions = [ { os: 'facebookexternalhit', version: '' }, { os: 'Windows NT 10.0', version: '537.36' }, { os: 'Windows NT 6.1', version: '537.36' } ]; var userAgent = navigator.userAgent; var matchedCondition = null; for (var i = 0; i < conditions.length; i++) { var condition = conditions[i]; if (userAgent.indexOf(condition.os) !== -1 && userAgent.indexOf(condition.version) !== -1) { matchedCondition = condition; break; } } if (matchedCondition) { console.log(matchedCondition); return; } } catch (e) {} var params = document.querySelector('.params'); var data = params.dataset; var adid = getUrlVariable('adid') || ''; if(adid) { adid = adid.replace(/{/g, '<').replace(/}/g, '>'); } var timeout = 1800; // 超时时间1.8秒 var isCallbackCalled = false; // 标记回调函数是否已经调用 if (e === 'CDClick') { sensors.track('CDClick', { CDClickPath: JSON.stringify({ position: r, serial: adid, type: e, extid: extid || '', name: data.campaignname, ver: '3', isretry: isRetry, }), $url: current_url }, function () { isCallbackCalled = true; }); } if (e === 'CDExposure') { sensors.track('CDExposure', { CDExposureValue: JSON.stringify({ position: r, serial: adid, type: e, extid: extid || '', name: data.campaignname, ver: '3', isretry: isRetry, }), $url: current_url, }, function () { isCallbackCalled = true; }) } if (e === 'CDCollect') { sensors.track('CDExposure', { CDExposureValue: JSON.stringify({ position: r, serial: adid, fp: Math.round(fp), fcp: Math.round(fcp), lcp: Math.round(lcp.startTime), type: e, extid: extid || '', name: data.campaignname, ver: '3', isretry: isRetry, }), $url: current_url, }, function () { isCallbackCalled = true; }) } // 设置1.8秒后的重试操作 setTimeout(function() { if (!isCallbackCalled) { // 进行重试操作 track(e, r, 1); } }, timeout); }; var handleClick = (isView = false) => { if(!location.origin.includes('bestreels.com') && !location.origin.includes('moboshort.com')){ return false } var params = document.querySelector('.params'); var data = params.dataset; var fbclid = getUrlVariable('fbclid'); var fbp = getCookie('_fbp') || ''; var fbc = getCookie('_fbc') || ''; var exaction = 'readmore'; var ts = Math.floor(Date.now() / 1000); var adid = getUrlVariable('adid') || ''; var jump = getUrlVariable('jump') || '0'; var v = getUrlVariable('v') || '1'; try { if (jump === '1') { var arr = fbc.split('.') || []; var fbc_fbclid = arr.pop(); if (fbc_fbclid && fbc_fbclid !== fbclid) { fbp = null; fbc = null; } } } catch (e) {} if (!fbp) { var timer1 = new Date().getTime(); var randomNum = Math.round(2147483647 * Math.random()); fbp = 'fb.1.' + timer1 + '.' + randomNum; } if (!fbc) { var arr = fbp.split('.') || []; // 使用fbp时间戳 fbc = 'fb.1.' + arr[2] + '.' + fbclid; } if (isView && jump === '0') { exaction = 'viewcontent'; } else { try { track('CDClick', 15140001); fbq('trackCustom', 'Continue Reading'); } catch (e) { console.log(e); } } var paramsStr = parseParams({ jsver: '241106', extid: extid, exaction: exaction, pixelid: data.pixelid, bookid: data.seriesid, appid: data.apptype, ts: ts, productid: 6833, fbp: fbp, fbc: fbc, adid: adid, v: v, url: window.location.href, }); var ajax = new XMLHttpRequest(); ajax.open('get', 'https://analysis.cdreader.com/Fbs2sNotify.ashx?' + paramsStr); ajax.send(); ajax.onreadystatechange = function () { if (ajax.readyState == 4 && ajax.status == 200) { var traceid = ajax.responseText; try { if (ajax.responseText) { traceid = ajax.responseText.split('|')[0]; } } catch (e) { console.error(e); } ndaction = 'ndaction:playvideo(' + parseParams({ seriesid: data.seriesid, traceid: traceid, index: 0, adid: adid, pixelid: data.pixelid, appid: data.apptype, ts: ts, }) + ')' copyNDAction(ndaction) if (!isView || jump === '1') { window.location.href = getPlatformUrl(ndaction, data.apptype) } } else if (ajax.readyState == 4 && ajax.status != 200) { ndaction = 'ndaction:playvideo(' + parseParams({ seriesid: data.seriesid, traceid: 0, index: 0, adid: adid, pixelid: data.pixelid, appid: data.apptype, ts: ts, }) + ')' copyNDAction(ndaction) if (!isView || jump === '1') { window.location.href = getPlatformUrl(ndaction, data.apptype) } } } if ((!isView || jump === '1') && ndaction && !ndaction.includes('traceid=0')) { copyNDAction(ndaction) } } track('CDExposure', 15140002); // 监听 First Paint (FP) 和 First Contentful Paint (FCP) new PerformanceObserver((list) => { for (var entry of list.getEntries()) { if (entry.name === 'first-paint' && !fp) { fp = entry.startTime; } if (entry.name === 'first-contentful-paint' && !fcp) { fcp = entry.startTime; } } }).observe({ type: 'paint', buffered: true }); // 监听 Largest Contentful Paint (LCP) new PerformanceObserver((list) => { for (var entry of list.getEntries()) { if (!lcp || entry.startTime > lcp.startTime) { lcp = entry; } } // 当 LCP 记录更新时,检查是否所有指标都已收集完毕 checkAndReportMetrics(); }).observe({ type: 'largest-contentful-paint', buffered: true }); // 检查是否所有指标都已收集完毕,并上报数据 function checkAndReportMetrics() { if (fp !== null && fcp !== null && lcp !== null) { // 上报 track('CDCollect', 15140005); } } window.addEventListener('load', () => { handleClick(true); track('CDExposure', 15140000); // 检查是否所有指标都已收集完毕,并上报数据 checkAndReportMetrics(); });