export const fInitAssetLoader = () => { const aEvs = ["mouseover", "click", "keydown", "wheel", "touchmove", "touchstart"]; const fBoot = async () => { aEvs.forEach(s => window.removeEventListener(s, fBoot)); // 1. 合并查询与处理 for (const oOld of document.querySelectorAll('script[type="text/lazyload"]')) { await new Promise(fRes => { const oNew = document.createElement("script"); // 2. 利用展开运算符批量搬运属性,跳过 type [...oOld.attributes].forEach(a => a.name !== 'type' && oNew.setAttribute(a.name, a.value)); oNew.type = "text/javascript"; oNew.onload = oNew.onerror = fRes; oNew.textContent = oOld.textContent; // 直接赋值,无 src 时生效 oOld.replaceWith(oNew); // 3. 现代 DOM API 直接替换 }); } document.body.classList.add("is-animated"); window.dispatchEvent(new Event("app:ready")); }; aEvs.forEach(s => window.addEventListener(s, fBoot, { passive: true, once: true })); // 4. once: true 自动解绑 };