gpt4 book ai didi

javascript - HTML 5 延迟属性

转载 作者:太空狗 更新时间:2023-10-29 15:04:38 35 4
gpt4 key购买 nike

我正在尝试理解 asyncdefer HTML 5 属性。这是我的测试代码:

<body>
<script type="text/javascript" src="script.js" **defer**></script>
<div id="div1">
Abc
</div>
</body>

脚本.js:

document.write("Hello World!")

据我了解,根据定义,“defer ...指定在页面解析完成时执行脚本”输出不应该是:

Abc
Hello World!

代替

Abc 

这是什么情况?

为什么 document.write() 不能使用 defer?

答案“document.write clears page”没有考虑 defer 属性。最终的答案是相似的,但我的问题是从另一个 Angular 提出的。

最佳答案

如果您在 Chrome 上打开 JavaScript 控制台,您将看到以下消息:

Failed to execute 'write' on 'Document': It isn't possible to write into a document from an asynchronously-loaded external script unless it is explicitly opened.

不从延迟(异步)脚本执行 document.write 是有道理的。考虑到这一点:

  • defer 指示浏览器在加载和解析文档后等待并执行代码。
  • document.write 写入文档流。
  • 如果在关闭(加载)文档时调用document.write,则自动调用document.open,清除文档并替换为document.write.

阻止在延迟脚本中执行 document.write 将阻止页面/文档被清除并且只显示 document.write 的内容。


还会有“内容应该写在哪里?”的问题。在您的问题中,您希望得到 Abc Hello World 的结果,但我希望得到 Hello World Abc,因为我仍然希望在 脚本之后立即写入内容 标记而不是在文档的末尾。

最好使用异步情况下支持的不同方法,这将使您可以控制内容的放置位置,例如 appendChildinsertBefore.

关于javascript - HTML 5 延迟属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34719149/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com