javascript - 当脚本在主体树中执行时,DOM 准备好了吗?

标签 javascript html dom dom-events domready

我有一个片段,放置在任何网站内,在文档中间,就像在文章中间,而不是在 <head> 内。 。此脚本通过附加 <script> 在我的域上加载外部脚本。标签(与谷歌分析片段非常相似)。

我的问题是,如果该脚本放置在正文中,DOM 是否尚未被解析,因此我可以安全地假设在评估脚本时我可以操作 DOM,而无需等待 DOMReady 事件?

我这么问是因为当我的脚本开始执行和 DOMReady 事件触发时会有很大的延迟(请参见棕色条)。我正在使用这个DOMReady implementation

enter image description here

托管网站

<html>

<head>
  ...
</head>

<body>
  Website content
  ...
  <div>
    
  <!-- Snippet -->
  <div id="myContainer"></div> <!------(I should be able to query this div) -->
  <script type="text/javascript">
    function() {
      var ga = document.createElement('script');
      ga.type = 'text/javascript';
      ga.async = true;
      ga.src = 'http://example.com/script.js';
      var s = document.getElementsByTagName('script')[0];
      s.parentNode.insertBefore(ga, s);
    })();
  </script>
  <!-- Snippet End -->
  
  <div>
  More content
  ...
</body>
</html>

example.com/ script.js

(function(){
    //by this time div#myContainer should exist, right?
    var div = document.getElementById('myContainer');
    div.innerHTML = "Hello World!";
})();

一些注意事项:

  • 我无法控制主机页面,它可以包含任何内容。
  • 对旧版浏览器的支持是一个问题。
  • 我应该能够尽快附加内容,我迫不及待地等待其他库和图像等内容完成加载。
  • 它应该每次都能可靠工作。

最佳答案

是的,没错。如果正文底部有一个脚本标记,那么当脚本运行时,所有内容都会在此之前呈现。

W3Schools 有一篇关于这个主题的好文章。

<head>中的脚本

Scripts to be executed when they are called, or when an event is triggered, are placed in functions. Put your functions in the head section, this way they are all in one place, and they do not interfere with page content.

<body>中的脚本

If you don't want your script to be placed inside a function, or if your script should write page content, it should be placed in the body section.

关于javascript - 当脚本在主体树中执行时,DOM 准备好了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40876535/

相关文章:

javascript - 使用 Cloud Code javascript 和 iOS Parse SDK 编辑用户

php - 如何让 Javascript 在 Prototype AJAX 请求中工作

php - 带页眉和页脚的字符串到 PDF

javascript - 使用 CSS 或 JS 隐藏 a href 标签内的文本

html - 在 DOM 中节点 ID 是否区分大小写?

javascript - 我们应该在 Angular js 版本 1.3.14 中使用 $locationProvider 吗

javascript - 如何使用导入-导出在没有数据库的情况下在javascript文件之间共享数据

javascript - Fancybox打不开

javascript - 在 Chrome 中重新计算样式事件大约需要 2 秒

dom - 我如何在单击 ember 中的按钮时动态添加输入选择元素