为什么“加载”或“DOMContentLoaded”在加载页面之前不会停止提示?

时间:2017-07-09 16:46:53

标签: javascript addeventlistener

问题:在我的网页加载之前触发了Javascript

解决方案:在函数中包装Javascript并在页面加载后调用它。

不幸的是它不起作用。这是我的例子。

我有一个简单的2页测试网站。第一页有蓝色背景和第二页的链接。当我单击第一页上的链接时,第二页上的脚本中的提示将出现在第二页加载之前的第一页上。 source activate [name of virtual environment] pip install numpy pip install matplotlib pip install pandas load似乎没有改变这一点。我确定我做错了什么,但我发现它无法发现。

第1页

DOMContentLoaded

第2页

<body style="background-color:blue">
    <a href="page_2.htm">Click this link.</a>
</body>

我在第二页的功能上方添加了此代码,但在第二页加载之前,提示继续在第一页的上方提前弹出。

<script>
    function globalFunction() {
        prompt("input a number");
    }
</script>

然后我尝试了这个,但结果相同。

document.addEventListener("DOMContentLoaded", globalFunction);

1 个答案:

答案 0 :(得分:3)

这是浏览器创建不属于文档本身的UI元素时的典型行为。浏览器是一个多线程软件,对prompt()alert()的调用是在与运行JavaScript代码不同的线程中处理的。浏览器能够更新UI(在这种情况下,在浏览器能够显示第二页之前,使用模块对话框阻止JS运行时继续运行。

解决方案是确保脚本在第二页已加载之前甚至不会被启动,并将提示推迟到足以使浏览器更新页面显示以显示它。

在第二个文件中,将代码更改为:

<script>
    window.addEventListener("DOMContentLoaded", function(){
      setTimeout(function globalFunction() {
                 prompt("input a number");
      }, 20);
    });
</script>

这将使该函数延迟运行20毫秒,这应该足以看到第二页。