我正在使用ASP.NET AJAX,我想了解这两个代码片段之间的区别:
function pageLoad(sender, eventArgs) { }
和
window.onload = function() { }
发布于 2009-03-02 17:10:03
首先要注意几件事。微软发明了一种名为Sys.Application
的“客户端运行时对象”。它在页面的整个客户端生命周期中处理引发init
、load
和unload
事件,如下所示:
Sys.Application.initialize()
开始了生命周期的init
部分。这个函数是所有客户端AJAX控件的函数,之后它们就可以与programaticallySys.Application
交互了。之后,它们开始生命周期的load
部分,调用所有订阅了这个函数的处理程序,它调用全局函数pageLoad
(如果定义了一个函数)步骤2)和3)对每个部分(即AJAX + UpdatePanel)回发重复。
所以最后的答案是:pageLoad
是Sys.Application.add_load()
的快捷方式。
然而,关于它与window.onload
的关系,事情开始变得有趣起来。本质上,只有在init
阶段完成后,MS才需要window.onload
来触发。但你无法控制浏览器何时启动onload
,因为它与“加载的内容”捆绑在一起。这就是所谓的"the window.onload
problem"
onload事件在所有页面内容(包括图像和其他二进制内容)加载后触发。如果您的页面包含大量图像,那么在页面变为活动状态之前,您可能会看到明显的滞后。
因此,他们只是发明了自己的“特殊”函数,在事件生命周期的正确时间触发,并将其称为"pageLoad"
。他们用来启动这个自定义事件生命周期的诀窍是place the call to Sys.Application.initialize()
just before the closing tag。服务器端运行时可以做到这一点。精明的读者会注意到,这个技巧允许MS解决window.onload
问题,因为您放入pageLoad
的任何代码都将独立于二进制内容(w/ one rare catch for IE)触发。
>它们的行为是否相同?
从概念上讲,是的,实际上根本不是由于上述window.onload
问题。惟一的规则是,您应该只将与AJAX控件交互的代码放在pageLoad
中,因为window.onload
遵循它自己的事件轨迹。
>还是先调用一个,再调用另一个?
他们是完全,100%独立的。
>或者一个会自动调用,另一个不会?
如果你定义了它们,它们都会被调用。
https://stackoverflow.com/questions/602441
复制相似问题