在Javascript中忽略外部脚本中的window.onload

use*_*156 5 javascript window external onload domready

的index.html

<html>
<head>
<script type="text/javascript" src="foo.js"></script>
<script type="text/javascript">
window.onload = function() {
    console.log("hello from html");
};
</script>
</head>
<body>
<div class="bar">bar</div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

foo.js

// this js file will be completely ignored with window.onload
//window.onload = function() {

    console.log("hello from external js");

    var bar = document.getElementsByClassName("bar");

    // this returns 0 instead of 1
    console.log(bar.length);
//};
Run Code Online (Sandbox Code Playgroud)
  1. window.onload在html中使用时,window.onload将忽略来自外部js.
  2. window.onload外部js被注释掉时,bar.length返回0.
  3. window.onload从HTML被删除,window.onload从外部JS工作正常.

谁能解释为什么我不能同时使用它们window.onload

如果我必须window.onload在html中使用,如何判断窗口是否从外部js加载?

Alc*_*iar 9

1)你绑定的方式,你可以只有一个方法附加到事件.您需要为所需内容添加事件侦听器.

window.addEventListener("load", function() { alert("hello!");});
Run Code Online (Sandbox Code Playgroud)

直接将方法设置为onload事件将替换以前附加的任何方法.但是,如果您使用侦听器,则可以将其中许多绑定到事件.

2)如果你在外部文件中注释掉onload,当document.getElementsByClassName("bar")调用它时,你的文档还没有准备好,那么它将返回0项.

3)使用addEventListener,正如我在第一点中解释的那样.如果你在这两个地方应用它,它将像魅力一样工作.