old*_*god 0 javascript onload microsoft-edge
在Edge上打开一个像上面这样的简单html会显示警报.
<html>
<head>
<script>
var onload = function() {
alert('I\'ve been called');
};
</script>
</head>
<body> my body </body>
</html>
Run Code Online (Sandbox Code Playgroud)
更多,如果你添加window.addEventListener('load', onload, false);
到你的代码,函数会被调用两次 ..
我有一个网络应用程序,我的onload函数在每个页面上调用两次...
您正在为window.onload
AND 分配一个函数,您正在向窗口加载事件安装事件监听器.您正在将两个事件侦听器连接到同一个函数,因此它被调用两次.
请记住,全局变量也是window
对象的所有属性,所以当你这样做时:
var onload = function() {...}
Run Code Online (Sandbox Code Playgroud)
在全局命名空间中,这与执行相同:
window.onload = function() {...}
Run Code Online (Sandbox Code Playgroud)
这是配置事件处理程序.
如果您不想要这个问题,那么将onload
函数的名称更改为不与之冲突window.onload
的函数或使用匿名函数(这是为什么您应该尽可能使用匿名事件处理程序并避免使用尽可能的全局命名空间).
我会建议:
// anonymous function
window.addEventListener('load', function() {
alert('I\'ve been called');
}, false);
Run Code Online (Sandbox Code Playgroud)
或这个:
// use IIFE function to insulate from global namespace
(function() {
var onload = function() {
alert('I\'ve been called');
};
window.addEventListener('load', onload, false);
})();
Run Code Online (Sandbox Code Playgroud)