【问题标题】:will HTML <body> onLoad events overwrite javascript window onload event?HTML <body> onLoad 事件会覆盖 javascript 窗口 onload 事件吗?
【发布时间】:2011-07-08 20:34:15
【问题描述】:

我有一个 HTML 页面,并且在 &lt;body&gt; onLoad 事件中附加了一个 javascript 函数。

我想在页面加载时显示一个消息对话框。由于某些原因,我无法编辑附加到此 onLoad 事件的 javascript 函数。

所以我创建了一个新的 javascript 文件,其中包含一个显示消息对话框的函数。然后我在我的javascript文件中添加了这一行

window.onload = onPageLoad; 

onPageLoad() 是我的函数,它可以显示消息对话框。

我使用脚本标记在我的 HTML 中附加了这个 javascript 文件。当我运行这个 HTML 文件时,onPageLoad() 函数没有被调用。

我想知道&lt;body&gt;标签,onLoad事件是否会覆盖窗口onload。如果是这样,有人可以帮助我以某种方式实现此功能。

请记住,我无法编辑我的 HTML 文件,我只能编写新的 javascript 文件。谢谢。

【问题讨论】:

  • 你能附上一些代码吗?尝试改用domready
  • 能否将代码添加到正文中?即在页面底部?另外,您在正文 onload 中调用的代码是什么。您也许可以替换该功能

标签: javascript onload


【解决方案1】:

取决于浏览器。 window.onload 目前在 OSX 上覆盖 Chrome、Firefox 和 Safari 中的 body onload

您可以将您的功能添加到 onload:

window.onload = function() {
  alert('window.onload')
}

if (window.addEventListener) {
  window.addEventListener('load', function() {
    alert('addEventListener')
  }, false);
} else if (window.attachEvent) { // IE < 9
  window.attachEvent('onload', function() {
    alert('attachEvent')
  });
}
<body onload="alert('body onload')">

</body>

和/或替换

var bodyOnload = document.body.onload;
window.onload = function() {
  alert('window.onload')
  bodyOnload()
}

if (window.addEventListener) {
  window.addEventListener('load', function() {
    alert('addEventListener')
  }, false);
} else if (window.attachEvent) { // IE < 9
  window.attachEvent('onload', function() {
    alert('attachEvent')
  });
}
<body onload="alert('body onload')">

</body>

【讨论】:

  • 你能想出任何方法来实现我想要的吗?如果是这样,请告诉我。谢谢。