导读:本期聚焦于小伙伴创作的《如何确保延时加载脚本a.js在页面完全加载后执行?多种实现方案对比》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《如何确保延时加载脚本a.js在页面完全加载后执行?多种实现方案对比》有用,将其分享出去将是对创作者最好的鼓励。

确保延时加载的a.js脚本在主页面加载完成后执行的方法

在前端开发中,延迟加载脚本是优化页面性能的常见手段,但有时需要保证延迟加载的脚本在主页面所有资源加载完成后才执行,避免因依赖未就绪导致脚本报错。下面介绍几种可靠的实现方案。

方案一:监听 window 的 load 事件

window.onload 事件会在主页面所有资源(包括图片、样式表、子框架等)完全加载完成后触发,我们可以在该事件的回调中动态加载 a.js 脚本,确保执行时机符合预期。

// 监听页面加载完成事件
window.addEventListener('load', function() {
    // 创建script标签用于加载a.js
    var script = document.createElement('script');
    script.src = 'a.js';
    // 可选:设置脚本加载完成后的回调
    script.onload = function() {
        console.log('a.js加载并执行完成');
    };
    // 将script标签添加到文档中,开始加载脚本
    document.body.appendChild(script);
});

这种方法的核心是依赖全局的 load 事件,适合需要等待主页面全部资源就绪的场景,但需要注意如果主页面有较多大型资源,load 事件触发时间可能较晚。

方案二:结合 DOMContentLoaded 与资源加载检测

如果只需要等待 DOM 结构构建完成,不需要等待图片等外部资源,可以先监听 DOMContentLoaded 事件,再在事件回调中触发脚本加载;如果仍有部分依赖资源需要等待,可以额外检测资源加载状态。

// 等待DOM结构加载完成
document.addEventListener('DOMContentLoaded', function() {
    // 假设主页面有一个依赖的图片,需要等待它加载完成
    var dependentImg = document.getElementById('dependent-img');
    if (dependentImg && !dependentImg.complete) {
        // 图片未加载完成时,等待其加载完成再加载a.js
        dependentImg.addEventListener('load', loadScript);
        dependentImg.addEventListener('error', loadScript); // 即使加载失败也继续加载脚本
    } else {
        // 图片已加载或不存在依赖图片,直接加载脚本
        loadScript();
    }
});

function loadScript() {
    var script = document.createElement('script');
    script.src = 'a.js';
    script.onload = function() {
        console.log('a.js执行完成');
    };
    document.head.appendChild(script);
}

这种方案灵活性更高,可以根据实际依赖的资源调整等待逻辑,适配不同的业务场景。

方案三:使用 async/defer 配合事件监听

如果是通过动态创建 script 标签加载脚本,也可以结合 asyncdefer 属性,但动态创建的 script 标签默认是异步加载的,因此需要手动控制执行时机。如果要确保脚本在主页面加载完成后执行,还是需要在 load 事件触发后再插入脚本。

// 动态加载脚本并控制执行时机
function loadScriptAfterPageLoad() {
    if (document.readyState === 'complete') {
        // 页面已经完全加载,直接执行加载逻辑
        loadAJS();
    } else {
        // 页面未加载完成,监听load事件
        window.addEventListener('load', loadAJS);
    }
}

function loadAJS() {
    var script = document.createElement('script');
    // 动态创建的脚本默认async为true,如需保证执行顺序可设置为false
    script.async = false;
    script.src = 'a.js';
    document.body.appendChild(script);
}
// 调用函数
loadScriptAfterPageLoad();

这里通过检测 document.readyState 状态,可以避免重复绑定事件,同时适配页面已经加载完成后再调用函数的情况。

注意事项

  • 如果 a.js 脚本本身有依赖其他全局变量或 DOM 元素,除了等待页面加载完成,还需要确保这些依赖在脚本执行前已经初始化完毕。

  • 动态加载脚本时,建议将 script 标签添加到 <head><body> 末尾,避免影响现有 DOM 结构。

  • 如果主页面使用了单页应用框架,需要结合框架的生命周期钩子(如 Vue 的 mounted、React 的 useEffect)来判断页面就绪状态,再触发脚本加载。

以上几种方案都可以实现延时加载的 a.js 脚本在主页面加载完成后执行,可以根据实际业务场景选择最合适的实现方式。

JS延时加载 页面加载完成 window.onload DOMContentLoaded 动态加载脚本

免责声明:已尽一切努力确保本网站所含信息的准确性。网站部分内容来源于网络或由用户自行发表,内容观点不代表本站立场。本站是个人网站免费分享,内容仅供个人学习、研究或参考使用,如内容中引用了第三方作品,其版权归原作者所有。若内容触犯了您的权益,请联系我们进行处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。前端、网络、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握网站开发与运维所需的核心技术栈。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端逻辑,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。