如果您的window.onload没有触发,本答案适用于您。
我发现以下内容可以解决该问题:
window.onload = myInitFunction;
或者
window.addEventListener("load", myInitFunction);
在这种情况下,被引用的函数(在本例中是myInitFunction)必须位于与onload事件所在的<script>-元素相同的位置(或被定义在之前的<script>-元素中)。否则它将无法工作。
因此,以下代码将不起作用:
<html>
<head>
<title>onload test</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<script>
window.addEventListener("load", myInitFunction)
</script>
<script>
function myInitFunction() {
alert('myInitFunction');
}
</script>
</head>
<body>
onload test
</body>
</html>
但这样会有效:
<html>
<head>
<title>onload test</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<script>
function myInitFunction() {
alert('myInitFunction');
}
</script>
<script>
window.addEventListener("load", myInitFunction)
</script>
</head>
<body>
onload test
</body>
</html>
这个会生效(因为我们只有一个<script>元素):
<html>
<head>
<title>onload test</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<script>
window.addEventListener("load", myInitFunction)
function myInitFunction() {
alert('myInitFunction');
}
</script>
</head>
<body>
onload test
</body>
</html>
如果由于某种原因您有两个 <script> 元素,无法(或不想)将它们合并,并且您希望 onload 定义在较高位置(即在第一个元素中),那么您可以通过以下方式解决:
而不是编写
window.onload = myInitFunction;
你写
window.onload = function() { myInitFunction() };
或者,不必写成
window.addEventListener("load", myInitFunction);
你写
window.addEventListener("load", function() { myInitFunction() });
解决这个问题的另一种方法是使用旧的方式。
<body onload="myInitFunction()">
onload
事件是否可能被后续覆盖或在load
事件触发后再进行绑定? - Nick Craver