我可以在加载整个页面之前运行javascript吗?

我可以在加载整个页面之前运行javascript吗?,javascript,html,Javascript,Html,我想在整个页面加载之前运行一点javascript。这可能吗?或者代码是否开始在上执行?您不仅可以,而且如果不想,您必须特别努力避免。:-) 当浏览器在解析HTML时遇到经典的script标记时,它会停止解析并将其交给运行脚本的JavaScript解释器。直到脚本执行完成,解析器才会继续(因为脚本可能会执行document.write调用以输出解析器应该处理的标记) 这是默认行为,但您有几个延迟脚本执行的选项: 使用JavaScript模块。一个type=“module”脚本被延迟,直到HTML

我想在整个页面加载之前运行一点javascript。这可能吗?或者代码是否开始在
上执行?

您不仅可以,而且如果不想,您必须特别努力避免。:-)

当浏览器在解析HTML时遇到经典的
script
标记时,它会停止解析并将其交给运行脚本的JavaScript解释器。直到脚本执行完成,解析器才会继续(因为脚本可能会执行
document.write
调用以输出解析器应该处理的标记)

这是默认行为,但您有几个延迟脚本执行的选项:

  • 使用JavaScript模块。一个
    type=“module”
    脚本被延迟,直到HTML被完全解析并创建初始DOM。这不是使用模块的主要原因,但这是原因之一:

    <script type="module" src="./my-code.js"></script>
    <!-- Or -->
    <script type="module">
    // Your code here
    </script>
    
    与模块一样,
    my code.js
    中的代码将与HTML解析并行获取和解析,但在完成HTML解析之前不会运行
    延迟
    不适用于内联脚本内容,仅适用于通过
    src
    引用的外部文件

  • 我不认为这是您想要的,但是您可以使用
    async
    属性告诉浏览器在HTML解析的同时获取JavaScript代码,然后尽快运行它,即使HTML解析没有完成。您可以将它放在
    type=“module”
    标记上,也可以在经典
    脚本
    标记上使用它而不是
    延迟

  • 脚本
    标记放在文档末尾,就在关闭
    标记之前:

    <!doctype html>
    <html>
    <!-- ... -->
    <body>
    <!-- The document's HTML goes here -->
    <script type="module" src="./my-code.js"></script><!-- Or inline script -->
    </body>
    </html>
    
    第1段

    if(节点列表的类型!==“未定义”&&!节点列表.prototype.forEach){ NodeList.prototype.forEach=Array.prototype.forEach; } document.querySelectorAll(“p”).forEach(p=>{ p、 添加(“找到”); });
    第2段

    您可以随时运行javascript代码。AFAIK在浏览器到达它所在的标记时执行。但您无法访问尚未加载的元素


    因此,如果您需要访问元素,应该等到加载DOM(这并不意味着加载整个页面,包括图像和其他内容。这只是文档的结构,加载的时间要早得多,因此您通常不会注意到延迟),使用jQuery中的事件或函数。

    可能的重复我不认为这是重复的-这更像是一个服务器-客户端通信问题。DOM层次结构完全构建后,DOMContentLoaded事件将立即触发,加载事件将在所有图像和子帧加载完毕后执行。或者将其全部放在一个函数中,并将其放入
    @JustinLiu-
    load
    事件发生在页面加载周期的很晚,在此之前运行JavaScript几乎不是最佳做法。但是的,这是一种选择。顺便说一句,我已经彻底检查了2020年的答案。或者你可以使用
    document.addEventListener('DOMContentLoaded',function(){//doyour stuff})
    @JustinLiu-是的,见最后一段。:-)“我从来没有看到过这样做的必要性,但你可以。”贾斯汀·刘——这已经开始变得过分了。如果你想发布答案,请发布答案。
    <!doctype html>
    <html>
    <!-- ... -->
    <body>
    <!-- The document's HTML goes here -->
    <script type="module" src="./my-code.js"></script><!-- Or inline script -->
    </body>
    </html>