【问题标题】:Html & defer attributeHtml & defer 属性
【发布时间】:2016-01-12 16:11:51
【问题描述】:

代码如下:

<html>
    <head>  

        <script>            
            function elem_onload() {
                console.log("elem_onload");
            };      
        </script>

    </head>

    <body onload="elem_onload()">       
        <script type="text/javascript" src="script.js" defer></script>      
    </body>
</html>

script.js:

console.log("external script");

defer 属性似乎不起作用。输出是:

external script
elem_onload

不管有没有defer属性。不应该吗

elem_onload
external script 

定义了延迟?

重复的答案!?

我想声明我的答案与

不重复

How exactly does <script defer=“defer”> work?

引用的推荐答案是关于内联脚本,其中浏览器行为对我来说很清楚 - 它只是忽略了defer。我的问题是关于外部脚本,在这种情况下浏览器应该执行外部延迟脚本

文档被解析后

正如文档所述,因此在 onload 事件之后。

所以我正在等待适当的答案...

【问题讨论】:

  • 之前没用过 defer,但是不应该给属性赋值,例如defer="true" ?
  • 你说得对,这似乎违反直觉,但你没有说你使用的是什么浏览器,你在不同的浏览器中是否有相同的行为,也没有任何内容是可缓存的。

标签: javascript


【解决方案1】:

关于onload。 这是onload属性的定义,取自this page

加载对象时触发 onload 属性。

onload 最常用于

元素中,用于在网页完全加载所有内容(包括图像、脚本文件、CSS 文件等)后执行脚本。但是,它也可以用于其他元素(请参阅下面的“支持的 HTML 标记”)。

因此,onload 函数将在 正文内的内容加载之后执行,即 - 在内部脚本执行之后。

【讨论】:

    【解决方案2】:

    恐怕 remdevtec 的答案不正确,因为他似乎忘记了我在脚本标签中使用了defer 属性,而定义说:

    此布尔属性设置为向浏览器指示脚本 意味着在文档被解析后执行

    所以在这种情况下(至少在我看来)外部脚本应该在onload 之后执行,但事实并非如此。

    【讨论】:

    • 根据 MDN:“此布尔属性设置为向浏览器指示脚本将在文档被解析之后执行,但在触发 DOMContentLoaded 之前执行。”
    猜你喜欢
    • 2014-03-26
    • 1970-01-01
    • 1970-01-01
    • 2021-10-22
    • 1970-01-01
    • 2021-12-02
    • 2020-12-06
    • 1970-01-01
    • 2012-11-29
    相关资源
    最近更新 更多