【问题标题】:What happened when a <script> tag is encountered within a html file?在 html 文件中遇到 <script> 标签时会发生什么?
【发布时间】:2014-06-21 01:48:29
【问题描述】:

我只是想知道当在 HTML 文件中遇到&lt;script src="http://...example.js"/&gt; 时,会发生什么?是否有一些事件处理程序或者会发送诸如获取请求之类的东西?

【问题讨论】:

  • 是的,有一个 GET 请求。关于事件处理程序,您的意思是在加载完成时触发的东西吗?如果是这样,大多数浏览器都有一个可以绑定的onload 事件。
  • 好问题,每次遇到脚本标签时都会诞生一个独角兽,这实际上就是它们的来源。
  • 大声笑,我也听说过一些关于独角兽的事情,就像一些面试官问 js 书籍封面中的独角兽是什么来的。你能解释一下,这与
  • 即使对于脚本标签,似乎也有一个 onload 事件。 stackoverflow.com/questions/4845762/…

标签: javascript html dom-events


【解决方案1】:

一般来说,浏览器会停止它正在做的一切——停止渲染、停止事件循环、停止侦听或对输入进行操作。这种状态称为“阻塞”。然后它执行脚本块中的任何内容,或者通过 GET 请求检索在src 属性中引用的脚本,然后在它到达时执行它。执行后,浏览器解除阻塞,继续解析DOM。

【讨论】:

    【解决方案2】:

    如果我没记错的话,脚本源不是异步加载的,这意味着执行将停止,直到它被加载。因此,没有必要宣布何时完成的事件。如果我错了,希望有人能纠正我。

    【讨论】:

      【解决方案3】:

      这在 HTML5 CR 中的script element 部分中进行了描述。在示例情况下,由于既没有使用defer 也没有使用async 属性,浏览器将在继续处理HTML 文档之前获取(使用GET 请求)并执行脚本。因此,默认处理是同步阻塞行为。

      但是,如果您真的使用 &lt;script src="http://...example.js"/&gt; 之类的标记而没有结束标记 &lt;/script&gt;,则根本不会获取脚本,除非您使用 XML 内容类型提供 HTML 文档的极少数情况。原因是&lt;script src="http://...example.js"/&gt;仅被解析为开始标签,所以其余的都被解析为script元素的内容,而当没有解析结束标签时,script元素未完成。所以不要尝试使用“自闭”语法;而是写&lt;script src="http://...example.js"&gt;&lt;/script&gt;

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-10-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-11
        • 1970-01-01
        • 2012-08-16
        • 2011-05-24
        相关资源
        最近更新 更多