//鏄惁瀛樺湪闇€瑕佷紭鍏堝姞杞界殑閲嶈template var isExistBaseLoadTemplate = false; //鍩虹璧勬簮鏄惁宸茬粡鍔犺浇 var baseLoaded = false; //鏄惁閲嶅鍔犺浇 let isReload = false; //鍏ㄩ儴鐨刯s鏁扮粍 let alljsArray = []; //鍏ㄩ儴鐨勫浘鐗囩殑鏁扮粍 let allImgArray = []; //鍏ㄩ儴鐨刢ss鏁扮粍 let allcssArray = []; //鍩虹璧勬簮 let baseDependsArray = []; //浼樺厛鍔犺浇鐨刯s鏁扮粍 let priorityJsDependsArray = []; //寤惰繜鍔犺浇鐨刯s鏁扮粍 let delayJsDependsArray = []; //浼樺厛鍔犺浇鐨刢ss鐩稿叧渚濊禆鐨勬暟缁 let prioritycssDependsArray = []; //寤惰繜鍔犺浇鐨刢ss鐩稿叧渚濊禆鐨勬暟缁 let delaycssDependsArray = []; //鍙鍖哄煙鍐呯殑缁勪欢鎴栬€呭尯鍧梚d let innerViewSettingIds = []; let mobileInnerViewSettingIds = []; //涓嶅湪鍙鍖哄煙鍐呯殑缁勪欢鎴栬€呭尯鍧梚d let outterViewSettingIds = []; let mobileOutterViewSettingIds = []; //fetch鍔犺浇瀹岀殑璧勬簮鏁扮粍 let isAlreadyDependArray = []; // preload瀹屾垚涔嬪悗鐨勫浘鐗 let loadingImgDomSuccessArray = []; //鍒ゆ柇鏄惁鏀寔preload let isSupportPreloadFlag = false; //鑾峰彇http https const protocol = window.location.protocol; //jsworker寮€鍏 let isJsworker = false; //鍒ゆ柇鏄惁鏀寔preload function isSupportPreload() { var link = document.createElement("link"); const relList = link.relList; if (!relList || !relList.supports) { isSupportPreloadFlag = false; } else { isSupportPreloadFlag = true; } } isSupportPreload(); //鍒ゆ柇鏄惁瀛樺湪baseTemplate function isHasBaseTemplate() { if (document.querySelectorAll("template[data-type='base_template']").length > 0) { isExistBaseLoadTemplate = true; } else { isExistBaseLoadTemplate = false; } } isHasBaseTemplate(); async function loadbaseFunc() { if (isExistBaseLoadTemplate) { var jqueryDom = document.querySelector("script[data-src*='jquery-1.11.0.concat.js']") || document.querySelector("script[src*='jquery-1.11.0.concat.js']") ; if (jqueryDom) { var option = {}; option["type"] = "script"; option["url"] = jqueryDom.getAttribute("data-src") || jqueryDom.getAttribute("src"); await loadDependFunc(option); loadBaseTemplate(); } } } loadbaseFunc(); //鍥剧墖鍔犺浇瀹屾垚鍚庡啀娆″洖濉浘鐗 function imgIsLoaded(dom, url) { var timer = null; timer = setTimeout(function () { dom.src = url; dom.classList.remove("img-default-bgc"); }, 8000) var imgObj = new Image(); imgObj.src = url; imgObj.onload = function () { if (timer) { clearTimeout(timer) } dom.src = url; dom.classList.remove("img-default-bgc"); } imgObj.onerror = function () { if (timer) { clearTimeout(timer) } if (url) { dom.src = url; } dom.classList.remove("img-default-bgc"); } } //璧勬簮棰勫姞杞 function preloadDepend(option) { } if (isJsworker) { var preloadWorker = new Worker(URL.createObjectURL(new Blob([document.getElementById("loadFunc").textContent], { type: "text/javascript" }))) } //鍒涘缓璧勬簮鍔犺浇鐨刾romis瀵硅薄 function loadDependFunc(option) { var loadDependPromise = new Promise((resolve, rej) => { if (option.type == "script") { var scriptDom = document.createElement("script"); scriptDom.type = "text/javascript"; scriptDom.src = option.url; document.body.appendChild(scriptDom); scriptDom.onload = function () { resolve("success"); }; scriptDom.onerror = function () { resolve("error"); }; } if (option.type == "style") { var linkDom = document.createElement("link"); linkDom.rel = "stylesheet"; linkDom.href = option.url; document.getElementById("appdStylePlace").insertAdjacentHTML('beforebegin', linkDom.outerHTML); // document.head.appendChild(linkDom); resolve("success"); } }); return loadDependPromise; } //鍙鍖哄垽鏂 function isInnerView(el) { //聽viewPortHeight聽鍏煎鎵€鏈夋祻瑙堝櫒鍐欐硶 const viewPortHeight = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight; const offsetTop = el.offsetTop; const scrollTop = document.documentElement.scrollTop; const top = offsetTop - scrollTop; return top <= viewPortHeight; } //鑾峰彇鎵€鏈夊湪鍙鍖哄煙鍐呯殑缁勪欢鍜屽尯鍧楃殑settingId function getInnerViewSettingIds() { Array.from(document.querySelectorAll("div[data-settingid],div[settingid]")).forEach(item => { var settingId = item.getAttribute("data-settingid") ? item.getAttribute("data-settingid") : (item .getAttribute("settingid") ? item.getAttribute("settingid") : item.getAttribute("mobile_settingid")); if (isInnerView(item)) { innerViewSettingIds.push(settingId); } else { outterViewSettingIds.push(settingId); } }) } // 鑾峰彇鎵嬫満绔彲瑙嗗尯鐨剆ettingid function getMobileInnerViewSettingIds() { Array.from(document.querySelectorAll("div[mobile_settingid]")).forEach(item => { var settingId = item.getAttribute("data-settingid") ? item.getAttribute("data-settingid") : (item .getAttribute("settingid") ? item.getAttribute("settingid") : item.getAttribute("mobile_settingid")); if (isInnerView(item)) { mobileInnerViewSettingIds.push(settingId); } else { mobileOutterViewSettingIds.push(settingId); } }) } getInnerViewSettingIds(); getMobileInnerViewSettingIds(); // 鑾峰彇鐪熷疄鐨剈rl function getRealUrl(href) { if (href && href != "") { try { var obj = checkBaseURL(href); return obj.href.replace(obj.protocol + "//" + obj.host, ''); } catch (error) { console.log(error, href); } } } function checkBaseURL(href) { if (href && href != "") { var el = document.createElement('div'); var escapedURL = href.split('&').join('&').split('<').join('<').split('"').join('"'); el.innerHTML = 'x'; var firstChild = el.firstChild; return { "href": firstChild.href, "href": firstChild.href, "hostname": firstChild.hostname, "host": firstChild.host, "protocol": firstChild.protocol } } } // 鎵嬫満绔緷璧栬В鏋愬拰棰勫姞杞 function mobileAnalyzeDepends(idsArray, isPriority) { idsArray.forEach(item => { var scriptDomArray = document.querySelectorAll("script[data-id='mobile_" + item + "']"); if (!scriptDomArray && !scriptDomArray.length) { return } Array.from(scriptDomArray).forEach(function (scriptDom) { var jsDepend = scriptDom.getAttribute("data-jsdepand"); var cssDepend = scriptDom.getAttribute("data-cssdepand"); var callBackFn = scriptDom.innerHTML; var loadArray = []; if (jsDepend && jsDepend != "") { jsDepend = jsDepend.replace(/\"|\[|]/g, ''); var jsDependArray = jsDepend.split(","); jsDependArray.forEach((element, index) => { var option = {}; var url = element; var urlreal = getRealUrl(url); option["type"] = "script"; option["url"] = protocol + url; option["callBackFn"] = callBackFn; if (alljsArray.indexOf(urlreal) == -1) { loadArray.push({ url: option["url"] }); alljsArray.push(urlreal); preloadDepend(option); } if (index == jsDependArray.length - 1) { loadArray.push({ callBackFn }); }; }); if (loadArray.length > 0) { if (isPriority) { priorityJsDependsArray.push(loadArray); } else { delayJsDependsArray.push(loadArray); } } } else { loadArray.push({ callBackFn }); if (loadArray.length > 0) { if (isPriority) { priorityJsDependsArray.push(loadArray); } else { delayJsDependsArray.push(loadArray); } } } if (cssDepend && cssDepend != "") { cssDepend = cssDepend.replace(/\"|\[|]/g, ''); var cssDependArray = cssDepend.split(","); cssDependArray.forEach(element => { var option = {}; option["type"] = "style"; var url = element; var urlreal = getRealUrl(url); if (allcssArray.indexOf(urlreal) != -1) { return }; option["url"] = protocol + url; allcssArray.push(urlreal); preloadDepend(option); if (isPriority) { prioritycssDependsArray.push(url); } else { delaycssDependsArray.push(url); } }) } }) }) } //瑙f瀽jsdepend鍜宑ssdepend function analyzeDepends(idsArray, isPriority) { idsArray.forEach(item => { var scriptDomArray = document.querySelectorAll("script[data-id='" + item + "']"); if (!scriptDomArray && !scriptDomArray.length) { return; }; Array.from(scriptDomArray).forEach(function (scriptDom) { var jsDepend = scriptDom.getAttribute("data-jsdepand"); var cssDepend = scriptDom.getAttribute("data-cssdepand"); var callBackFn = scriptDom.innerHTML; var loadArray = []; if (jsDepend && jsDepend != "") { jsDepend = jsDepend.replace(/\"|\[|]/g, ''); var jsDependArray = jsDepend.split(","); jsDependArray.forEach((element, index) => { var option = {}; var url = element; var urlreal = getRealUrl(url); option["type"] = "script"; option["url"] = protocol + url; option["callBackFn"] = callBackFn; if (alljsArray.indexOf(urlreal) == -1) { loadArray.push({ url: option["url"] }); alljsArray.push(urlreal); preloadDepend(option); } if (index == jsDependArray.length - 1) { loadArray.push({ callBackFn }); }; }); if (loadArray.length > 0) { if (isPriority) { priorityJsDependsArray.push(loadArray); } else { delayJsDependsArray.push(loadArray); } } } else { loadArray.push({ callBackFn }); if (loadArray.length > 0) { if (isPriority) { priorityJsDependsArray.push(loadArray); } else { delayJsDependsArray.push(loadArray); } } } if (cssDepend && cssDepend != "") { cssDepend = cssDepend.replace(/\"|\[|]/g, ''); var cssDependArray = cssDepend.split(","); cssDependArray.forEach(element => { var option = {}; option["type"] = "style"; var url = element; var urlreal = getRealUrl(url); if (allcssArray.indexOf(urlreal) != -1) { return }; option["url"] = protocol + url; allcssArray.push(urlreal); preloadDepend(option); if (isPriority) { prioritycssDependsArray.push(url); } else { delaycssDependsArray.push(url); } }) } }) }) } //鏀堕泦鎵€鏈夌殑鐩稿叧渚濊禆杩涜preload function getAllDepends() { //椤甸潰script寮曞叆鐨刯s璧勬簮 Array.from(document.querySelectorAll("script:not([type='text/x-delay-script']):not([async])")).forEach(item => { if (item.getAttribute("data-src")) { //鑾峰彇鐩稿叧渚濊禆閾炬帴 var url = item.getAttribute("data-src"); if (alljsArray.indexOf(url) != -1) { return; }; alljsArray.push(url); if (url.indexOf("jquery-1.11.0.concat") != -1) { baseDependsArray.push(url); } else { baseDependsArray.push(url); }; var option = {}; option["type"] = "script"; option["url"] = protocol + url; preloadDepend(option); } }); //椤甸潰link鏍囩寮曞叆鐨刢ss璧勬簮 Array.from(document.querySelectorAll("link[type='text/css']")).forEach(item => { if (item.getAttribute("data-href")) { var url = item.getAttribute("data-href"); if (allcssArray.indexOf(url) != -1) { return; }; allcssArray.push(url); prioritycssDependsArray.push(url); var option = {}; option["type"] = "style"; option["url"] = protocol + url; preloadDepend(option); } }); //椤甸潰涓粍浠跺拰鍖哄潡鐨勭浉鍏充緷璧 //浼樺厛瀵瑰彲瑙嗗尯鍩熷唴鐨勭粍浠跺拰鍖哄潡鐨勪緷璧栬繘琛岄鍔犺浇 analyzeDepends(innerViewSettingIds, true); mobileAnalyzeDepends(mobileInnerViewSettingIds, true); //瀵逛笉鍦ㄥ彲瑙嗗尯鍩熷唴鐨勭粍浠舵垨鑰呭尯鍧楄繘琛岄鍔犺浇 analyzeDepends(outterViewSettingIds, false); mobileAnalyzeDepends(mobileOutterViewSettingIds, false); } function includes(arr1, arr2) { return arr2.every(val => arr1.includes(val)); } //鍔犺浇鏂规硶 async function loadDepends(array, type, callback) { if (array.length && array.length > 0) { for (var i = 0; i < array.length; i++) { var option = { type }; if (typeof array[i] == "string") { option["url"] = array[i]; await loadDependFunc(option); } else if (array[i] instanceof Array) { var callBackFn = ""; for (var j = 0; j < array[i].length; j++) { if (array[i][j].url) { option["url"] = array[i][j].url; await loadDependFunc(option); } if (array[i][j].callBackFn) { callBackFn = array[i][j].callBackFn; try { eval(callBackFn); } catch (err) { console.log(err); continue; } } } } if (i == array.length - 1) { if (callback) { try { callback(); } catch (err) { console.log(err); } } } } } else { if (callback) { try { callback(); } catch (err) { console.log(err); } } } } //棰勫厛寮曞叆prioritycssDependsArray璧勬簮 function loadprioritycss(callback) { loadDepends(prioritycssDependsArray, "style", callback); } //寮曞叆base璧勬簮 function loadBasejs(callback) { function loadCallBack() { baseLoaded = true; if (callback) { setTimeout(function () { callback(); }, 10) } } loadDepends(baseDependsArray, "script", loadCallBack); } //棰勫厛寮曞叆priorityJsDependsArray璧勬簮 function loadpriorityjs(callback) { loadDepends(priorityJsDependsArray, "script", callback); } //鍒犻櫎楂樺害璁$畻鏍峰紡 function deleteFoldHeight() { Array.from(document.querySelectorAll( "style[data-type='aboveTheFoldHeight'],style[data-type='unAboveTheFoldHeight']" )) .forEach(item => { item.remove(); }); } //鍒犻櫎鏍峰紡鏀堕泦鏍峰紡 function deleteStyleInline() { function delFunc() { Array.from(document.querySelectorAll( "style#speed3DefaultStyle,style[data-type='inlineHeadStyle'],link[data-type='inlineHeadStyle']" )) .forEach(item => { item.remove(); }); } delFunc() } //寮曞叆鍚庣画delaycssDependsArray璧勬簮 function loaddelaycss() { loadComponentUnTemplate(); deleteFoldHeight(); loadDepends(delaycssDependsArray, "style"); } //寮曞叆鍚庣画delayJsDependsArray璧勬簮 function loaddelayjsFunc(callback) { // console.log("loaddelayjsFunc", delayJsDependsArray) if (delayJsDependsArray && delayJsDependsArray.length > 0) { loadDepends(delayJsDependsArray, "script", callback); } else { callback(); } } //鍔犺浇template涓殑浠g爜 function loadTemplate(type) { Array.from(document.querySelectorAll("template[data-type='" + type + "']")).forEach(item => { //瑙嗛缁勪欢鐗规畩澶勭悊 var isVideo = false; var settingId = null; if (item.getAttribute("data-lazyload-alias") && item.getAttribute("data-lazyload-alias") == "video") { isVideo = true; settingId = item.getAttribute("data-settingId"); }; var func = item.innerHTML; try { $(item).replaceWith(func); if (func.indexOf('code_template') != -1) { loadTemplate('code_template'); return false; } else if (func.indexOf('js_template') != -1) { loadTemplate('js_template'); return false; } } catch (error) { console.log(error); return true; } if (isVideo) { var scriptDom = document.querySelector("script[data-id='" + settingId + "']"); if (!scriptDom) { return } var jsDepend = scriptDom.getAttribute("data-jsdepand"); var cssDepend = scriptDom.getAttribute("data-cssdepand"); var callBackFn = scriptDom.innerHTML; var loadArray = [ [] ]; if (jsDepend && jsDepend != "") { jsDepend = jsDepend.replace(/\"|\[|]/g, ''); var jsDependArray = jsDepend.split(","); jsDependArray.forEach((element, index) => { var option = {}; var url = element; var urlreal = getRealUrl(url); option["type"] = "script"; option["url"] = protocol + url; option["callBackFn"] = callBackFn; loadArray[0].push({ url: option["url"] }); alljsArray.push(urlreal); preloadDepend(option); if (index == jsDependArray.length - 1) { loadArray[0].push({ callBackFn }); }; }); loadDepends(loadArray, "script") } else { loadArray.push({ callBackFn }); loadDepends(loadArray, "script") } if (cssDepend && cssDepend != "") { cssDepend = cssDepend.replace(/\"|\[|]/g, ''); var cssDependArray = cssDepend.split(","); cssDependArray.forEach(element => { var option = {}; option["type"] = "style"; var url = element; var urlreal = getRealUrl(url); // if (element.indexOf("/static/") != -1) { // url = element.replace(/\/static\/+t-([A-Za-z0-9]+)/g, "/static") // } if (allcssArray.indexOf(urlreal) != -1) { return }; option["url"] = protocol + url; allcssArray.push(urlreal); var linkDom = document.createElement("link"); linkDom.rel = "stylesheet"; linkDom.href = option.url; document.getElementById("appdStylePlace").insertAdjacentHTML('beforebegin', linkDom.outerHTML); }) } } }) } //鍔犺浇閲嶈鐨勭涓夋柟浠g爜 //鍔犺浇涓嶉噸瑕佺殑绗笁鏂逛唬鐮 function loadCodeTemplate() { deleteStyleInline(); loadTemplate("code_template"); } //鍔犺浇鍐呯疆js渚濊禆 function loadJsTemplate() { loadTemplate("js_template"); } //鍔犺浇閲嶈鐨勫熀纭€璧勬簮锛氶槻鍚岃绛 function loadBaseTemplate() { loadTemplate("base_template"); } //鍔犺浇缁勪欢鍐呴儴闇€瑕佷紭鍏堜簬鍥炶皟鎵ц鐨則emplate function loadComponentUnTemplate() { loadTemplate("component_unUseTemplate"); } //鏈€鍏堟墽琛岀殑鍔犺浇鏂规硶 function ansyFunc() { if (!isReload) { console.log("**************************") //鏄惁閲嶅鍔犺浇锛屼笉閲嶅鎵ц isReload = true; //娓呴櫎8s锛?s寤惰繜闃叉閲嶅瑙﹀彂 // clearTimeout(loadTimer); //鍔犺浇鍩虹鐨勮祫婧恓q銆乴ab绛 //ansyFunc2浣滀负callback鏂规硶浼犲弬杩涜銆 loadBasejs(ansyFunc2); //鍔犺浇鍐呰仈鏍峰紡 loadInlineStyleDelay(); //鍔犺浇棰勫姞杞藉畬鎴愮殑鍥剧墖 loadSuccessImg(); } } //鍔犺浇inlineStyleDelay杩欎釜浠絫emplate,鍩烘湰閮芥槸浜涘唴鑱旀牱寮 function loadInlineStyleDelay() { Array.from(document.querySelectorAll("template[data-type='inlineStyleDelay']")).forEach(item => { var style = item.innerHTML; item.outerHTML = style; }) } // 鍔犺浇鍥剧墖 function loadSuccessImg() { //涓€鐧炬绉掑欢杩 闃叉涓婇潰鍥炲~鏈夋椂闂村樊 setTimeout(() => { loadingImgDomSuccessArray.forEach(ele => { const option = ele; ele.dom.src = option.url; // 楂樼骇骞荤伅鐗囦笌鏂扮増楂樼骇骞荤伅鐗囧鐞 // ele.dom.setAttribute('data-src', option.url); ele.dom.classList.remove("img-default-bgc"); }) }, 100) } //template閲岀殑鍥剧墖鍥炲~ function loadTemplateImg(classname) {} //鍔犺浇鍙鍖轰緷璧 function loadViewDepends() { loadprioritycss(); loadpriorityjs(loadUnViewDepends); } //鍔犺浇闈炲彲瑙嗗尯渚濊禆 function loadUnViewDepends() { loaddelaycss(); loadJsTemplate(); loaddelayjsFunc(loadCodeTemplate); } function ansyFunc2() { loadViewDepends(); } getAllDepends(); // ansyFunc(); var jsonStr = window.__ph_optSet__ || ""; try { var loadImgType = JSON.parse(jsonStr).loadImgType } catch (error) { var loadImgType = "2" } if (!!loadImgType && loadImgType == "0") { var userAgent = navigator.userAgent; if (userAgent == "Mozilla/5.0 (Linux; Android 11; moto g power (2022)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Mobile Safari/537.36" || userAgent == "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36") { window.addEventListener('mousemove', ansyFunc); window.addEventListener('keydown', ansyFunc); window.addEventListener('touchmove', ansyFunc); window.addEventListener('touchend', ansyFunc); window.addEventListener('scroll', ansyFunc); } else { ansyFunc(); } } else { ansyFunc(); } // var timeer; // var flag = false; // window.addEventListener('scroll', function () { // if (!flag) { // flag = true; // clearTimeout(timeer); // loadUnViewDepends() // } // }); // onloadHack(function () { // timeer = setTimeout(() => { // clearTimeout(timeer); // if (!flag) { // flag = true; // loadUnViewDepends() // } // }, 1); // })