一尘不染

使用window.onload的最佳实践

javascript

我开发Joomla网站/组件/模块和插件,并且每隔一段时间我都需要使用JavaScript来加载页面时触发事件的功能。在大多数情况下,这是使用window.onload函数完成的。

我的问题是:

  1. 这是在页面加载时触发JavaScript事件的最佳方法,还是有更好/更新的方法?
  2. 如果这是触发页面加载事件的唯一方法,那么确保多个事件可以由不同的脚本运行的最佳方法是什么?

阅读 247

收藏
2020-05-01

共1个答案

一尘不染

window.onload = function(){};可以,但是您可能已经注意到, 它只允许您指定1个listener

我想说,这样做的更好/更新的方法是使用框架,或仅使用本机addEventListenerattachEvent(对于IE)方法的简单实现,这也允许您
删除 事件的侦听器。

这是跨浏览器的实现:

// Cross-browser implementation of element.addEventListener()
function listen(evnt, elem, func) {
    if (elem.addEventListener)  // W3C DOM
        elem.addEventListener(evnt,func,false);
    else if (elem.attachEvent) { // IE DOM
         var r = elem.attachEvent("on"+evnt, func);
         return r;
    }
    else window.alert('I\'m sorry Dave, I\'m afraid I can\'t do that.');
}

// Use: listen("event name", elem, func);

对于window.onload情况,请使用: listen("load", window, function() { });


编辑 我想通过添加其他人指出的宝贵信息来扩大答案。

这与 DOMContentLoaded (Mozilla,Opera和webkit夜间软件当前支持)和
onreadystatechange (适用于IE) 事件有关 ,这些 事件 可以应用于 文档
对象,以了解何时可以操作文档(无需等待所有图像/样式表等)。 ..载入)。

跨浏览器对此有很多“ hacky”实现,因此,我强烈建议为该功能使用框架。

2020-05-01