我正在使用ASP.NET AJAX,并希望了解这两个片段之间的区别:
function pageLoad(sender, eventArgs) { }
和
window.onload = function() { }
答案 0 :(得分:41)
首先要注意几点。 MS发明了一种名为Sys.Application
的“客户端运行时对象”。它处理在页面[客户端]生命周期内发起init
,load
和unload
事件,如下所示:
Sys.Application.initialize()
开始生命周期的init
部分。这是initialize()
所有客户端的AJAX控件,之后他们就可以以编程方式进行交互了Sys.Application
开始生命周期的load
部分,调用已订阅此活动的所有处理程序pageLoad
(如果已定义) 所以最后答案:pageLoad
只是Sys.Application.add_load()
的便捷快捷方式。
关于它与window.onload
的关系,事情开始变得有趣。从本质上讲,MS需要window.onload
才能在<{em> init
阶段完成后仅启动。但您无法控制浏览器何时触发onload
,因为它与“内容已加载”相关联。这称为"the window.onload
problem":
onload事件在所有页面之后触发 内容已加载(包括图像 和其他二进制内容)。如果你的 页面包含很多图像然后你 可能会看到明显滞后 页面变为活动状态。
所以,他们刚刚发明了自己的“特殊”功能,可以在事件生命周期的正确时间触发,并将其命名为"pageLoad"
。他们用来启动这个自定义事件生命周期的技巧是place the call to Sys.Application.initialize()
just before the closing </form>
tag。 serverside运行时执行此操作。精明的读者会注意到这个技巧允许MS解决window.onload
问题,因为您放入pageLoad
的任何代码都将独立于二进制内容(w/ one rare catch for IE)而激活。
<强>&GT;他们的行为是否相同?
概念上是的,实际上根本没有问题window.onload
。唯一的规则是,您应该只在pageLoad
中放置与您的AJAX控件交互的代码,因为window.onload
遵循其自己的事件轨迹。
<强>&GT;或者是在另一个之前呼叫?
他们完全是100%独立的。
<强>&GT;或者是自动调用而另一个不是?
如果你定义了它们,它们都会被调用。