标签: domcontentloaded

DOMContentLoaded事件中的代码无法正常工作

我用过

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8" />
</head>
<body>
  <button type="button" id="button">Click</button>
  <pre id="output">Not Loading...</pre>

  <script src="https://cdnjs.cloudflare.com/ajax/libs/babel-standalone/6.17.0/babel.min.js"></script>
  <script type="text/babel">
    document.addEventListener('DOMContentLoaded', function () {
      const button = document.getElementById('button');
      const output = document.getElementById('output');

      output.textContent = 'Loading...';

      addEventListener('click', function () {
        output.textContent = 'Done';
      });
     });
  </script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

但似乎里面的代码document.addEventListener('DOMContentLoaded', function () {});没有加载.

如果我从我的代码中删除它,它突然工作.

在这里做了一个JS Bin.

javascript addeventlistener domcontentloaded babeljs

18
推荐指数
2
解决办法
3万
查看次数

为什么在DOMContentLoaded之前发生First Paint

我正在深入研究随谷歌Chrome一起提供的性能工具,因为我正试图了解性能改进技术.我正在玩Timeline选项卡,我发现在我的页面上,First Paint事件发生在DOMContentLoaded事件之前.我读了一些文章,据说当浏览器开始向用户显示内容的第一时刻必须在DOMContentLoaded之后.有人可以解释一下这是真的吗?

google-chrome google-chrome-devtools domcontentloaded

13
推荐指数
1
解决办法
2115
查看次数

功能检测支持DOMContentLoaded事件

是否有可能检测到对DOMContentLoaded事件的支持?

方法就像Kangax的解决方案在这里不起作用,因为DOMContentLoaded它不作为任何元素的属性公开:在没有浏览器嗅探的情况下检测事件支持

javascript events javascript-events domcontentloaded browser-feature-detection

11
推荐指数
1
解决办法
1713
查看次数

为什么 DOMContentLoaded 处理程序可以阻止首次绘制?

有一个类似的问题没有解决。

我遇到过侦听 DOMContentLoaded 的处理程序可以阻止首次绘制的情况。有时会阻塞,有时不会

我尝试了很多次 cmd + R 来查看它。这种行为有什么解释吗?

我还录制了一段视频来展示这一点:https : //www.youtube.com/watch?v=EDZQ1nLCK2w&feature=youtu.be

  1. 当你在重新加载后看到一个空白页面时,这意味着 DOMContentLoaded 阻止了第一次绘制
  2. 当您看到文本“Some text”然后重新加载后出现空白页面时,这意味着 DOMContentLoaded 没有阻止第一次绘制
window.addEventListener('DOMContentLoaded', () => {
    let i = 0;
    while (i++ < 1000000000) {
        continue;
    }
    document.getElementById('el').remove();
});
Run Code Online (Sandbox Code Playgroud)
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <p id="el">Some text</p>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

javascript dom domcontentloaded

9
推荐指数
1
解决办法
255
查看次数

DOM执行问题的顺序

我在HEAD标记中有一些JavaScript,它在页面上的最后一个脚本(当前已解析)之前动态插入异步加载脚本标记.这个动态包含的脚本标记包含需要在DOM可用之后但在加载所有图像和脚本标记之前解析DOM的JavaScript.重要的是JavaScript在加载所有JS之前开始执行,因为如果有一个悬挂的脚本,这将导致糟糕的用户体验.这意味着我不能等待DOMContentLoaded事件发生.我没有任何灵活性,我放置动态包含脚本标记的JavaScript的第一位.

我的问题是,我是否可以立即开始解析DOM,而无需等待DOMContentLoaded事件?如果没有,有没有办法让我在没有等待DOMContentLoaded活动的情况下这样做?

javascript browser domcontentloaded

7
推荐指数
1
解决办法
305
查看次数

DOMContentLoaded如何与Web组件相关?

只有在准备好DOM之后才开始操作DOM是一个古老的常识,我们可以确定所有元素都可用,并且在jQuery之后的日子里我们都使用了这个DOMContentLoaded事件.

现在,Web组件(特别是以自治自定义元素的形式)倾向于创建自己的HTML,通常在connectedCallback()生命周期方法中.

第一个问题:

如何DOMContentLoaded与(自治)自定义元素相关?只有在所有组件connectedCallbacks完成后才会发生事件吗?如果没有,我如何确保某些代码仅在Web组件初始化后执行?

第二个问题,完全相关:

Web组件如何与元素的defer属性相关联script

javascript deferred-loading web-component domcontentloaded

7
推荐指数
1
解决办法
305
查看次数

在 Firefox 中,window.onload 在 jQuery document.ready 之前触发

我创建了一个显示问题的 Codepen:https ://codepen.io/samuelg0rd0n/pen/ExVGQEV

在 Chrome 中,它在窗口 onload 事件之前正确触发 DOMContentLoaded 事件和 jQuery 文档就绪事件。然而,在 Firefox 中,顺序是:

DOMContentLoaded
window.onload
$(window).on('load', function() { ... });
$(document).ready();
$(function() { ... });
Run Code Online (Sandbox Code Playgroud)

window.onload 和 jQuery 窗口 onLoad 都会在 jQuery 文档就绪事件之前触发。我很确定这一定是 jQuery 或 Firefox 中的某种错误。谁可以给我解释一下这个?谢谢。

Chrome版本:81.0.4044.138

火狐版本:75.0

在 macOS 和 Linux 上都尝试过,结果相同。

firefox jquery document-ready domcontentloaded jquery-events

7
推荐指数
1
解决办法
1810
查看次数

Chrome:DOMContentLoaded 不等待延迟脚本标签中的 CSSOM?

根据我的理解,当在位于样式表正下方的脚本标签中使用 defer 时,浏览器会在执行脚本并触发 DOMContentLoaded 之前等待样式表加载 (CSSOM)。(更多相关内容)

这在 Firefox 中有效,但在 Chrome 中无效,因此我做了一个测试用例,其中在延迟的脚本标记之前加载了一个巨大的 css 文件。

带有样式表和延迟脚本的 HTML 文件。

<!DOCTYPE html>
<html>
<head>
    <link rel="stylesheet" href="main.css">
    <script src="main.js" defer></script>
</head>
<body>
    <div class="result">Loading...</div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

CSS 文件包含引导程序和设置字体系列的测试类。

/* ...bootstrap v4 css... */
.test {
    font-family: 'It works!';
}
Run Code Online (Sandbox Code Playgroud)

JS 文件包含 jQuery 和一个简单的测试脚本。

// ...jQuery....
$(function () {
    $('<meta class="test">').appendTo(document.head);
    var extractedStyles = $('.test').css('font-family');
    $('.result').text(extractedStyles);
});
Run Code Online (Sandbox Code Playgroud)

在 Firefox 中,CSS 可以在执行时解析,我看到“它有效!” > 参见火狐浏览器

在 Chrome 中,CSS 无法执行时解析,我看到“Times New Roman” > 请参阅 Chrome …

javascript google-chrome deferred cssom domcontentloaded

5
推荐指数
0
解决办法
533
查看次数

DOMContentLoaded 和 turbolinks:load 不会在第一页加载的动态加载脚本上触发(加载没有 turbolinks)

'turbolinks:load' 不会在直接加载的页面上触发,但是,在加载了 turbolinks 的页面上,'turbolinks:load' 事件工作正常。

<!DOCTYPE html>
<html>
  <head>
    <script type="text/javascript" src="https://rawgit.com/turbolinks/turbolinks/master/dist/turbolinks.js"></script>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <title>
        test
    </title>
    <script>
      function loadScript(src) {
        if(!document.querySelector("script[src='"+src+"']")){
          var n = document.createElement("script");
          n.src = src;
          n.async = false;
          document.getElementsByTagName("head")[0].appendChild(n);
        };
      };
    </script>
  </head>
  <body>
    <p style='color:red'>
      Hi Priority Rendering With inline css to improve start render
    </p>
    <script type="text/javascript">
      loadScript("dynamic_load_turbolinks_script.js");
    </script>
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

dynamic_load_turbolinks_script.js 的代码

console.log('This file will contain all functionally required script');
document.addEventListener("turbolinks:load", function() {
  console.log('Inside turbolinkss Load')
});
window.onload = function(){
  console.log('Inside window onload') …
Run Code Online (Sandbox Code Playgroud)

javascript ruby-on-rails dynamic-script-loading domcontentloaded turbolinks

5
推荐指数
0
解决办法
917
查看次数

一个或多个 DOMContentLoaded 事件侦听器?

我应该只创建一个 DOMContentLoaded 事件侦听器并收集内部所有元素的所有内容,还是可以为每个元素编写多个 DOMContentLoaded 侦听器?

这:

    window.document.addEventListener('DOMContentLoaded', function() {
        var elems = document.querySelectorAll('.sidenav');
        var instances = M.Sidenav.init(elems, {edge:'right'});
    });

    window.document.addEventListener('DOMContentLoaded', function() {
        var elems = document.querySelectorAll('.collapsible');
        var instances = M.Collapsible.init(elems, {"accordion" : false});
    });
Run Code Online (Sandbox Code Playgroud)

或这个:

    window.document.addEventListener('DOMContentLoaded', function() {
        var elems = document.querySelectorAll('.sidenav');
        var instances = M.Sidenav.init(elems, {edge:'right'});
        var elems2 = document.querySelectorAll('.collapsible');
        var instances2 = M.Collapsible.init(elems2, {"accordion" : false});
    });
Run Code Online (Sandbox Code Playgroud)

什么是更正确的呢?对 DOMContentLoaded 事件使用多个函数是否有任何警告?一个人会覆盖另一个人,还是他们都被保存并稍后被解雇?

现在我把它们分别放在不同的功能中,这对我来说更方便,但我不知道它是否正确。谢谢。

javascript load domcontentloaded

5
推荐指数
1
解决办法
1564
查看次数

窗口 DOMContentLoaded 与文档 DOMContentLoaded

“DOM 就绪”的现代替代是事件DOMContentLoaded

您可以在 2 个全局对象上监听它:

现在我知道这个事件的原始目标是document根据上面的 MDN 链接,还可以“在 Window 界面上侦听此事件以在捕获或冒泡阶段处理它”。

window当捕获或冒泡阶段捕获事件更合适甚至需要捕获事件时,是否存在特定优势或特殊情况

javascript document-ready dom-events domcontentloaded

5
推荐指数
1
解决办法
1438
查看次数

"文档准备好"应该在IE上像这样工作吗?

我正在制作一个小型的javascript框架,原因有很多,包括学习.

因此,我想实现"文档就绪"功能,所以我去检查jQuery如何伪造DOMContentLoadedIE <9.

问题是,它似乎没有按照它应该的方式工作.在IE8和一个很好的浏览器中检查这个小提琴.

逻辑是:应用css使div开始为红色,然后在"ready"中使其变为蓝色,并在加载时使其变为绿色.此外,有三个带有虚假URL的img标签,因此在就绪和加载之间存在合成延迟.

应该发生什么:
如果有的话,div不应该显示为红色超过一秒钟.理想情况下,首先看到的应该是蓝色.然后,当浏览器超时无效图像时,绿色.

在IE8上会发生什么:
div保持红色,直到所有图像"加载"(在此合成示例中,超时),然后变为绿色.

再一次,我并不是要求修复,我问是否在IE8上表现这样的框架是正确的(我不再关心IE 6-7了),或者这是否正在发生由于我以某种方式滥用jQuery.

PS:我知道如何手动绑定事件,我要求更多关于这是否是预期/可接受/错误/我的错误.

javascript jquery onload document-ready domcontentloaded

2
推荐指数
1
解决办法
1739
查看次数