我正在使用ASP.NET AJAX,并希望了解这两个片段之间的区别:
function pageLoad(sender, eventArgs) { }
和
window.onload = function() { }
他们的行为是一样的吗?
或者是在另一个之前打电话?
或者一个会自动调用而另一个不会?
Crescent Fre.. 41
首先要注意的几件事情.MS发明了一种称为"客户端运行时对象" Sys.Application
.它处理提升init
,load
和unload
整个页面的[客户方]寿命事件,如下所示:
Sys.Application.initialize()
开始init
生命周期的一部分.这initialize()
是所有客户端AJAX控件,之后他们准备以编程方式进行交互
Sys.Application
开始load
生命周期的一部分,调用已订阅此事件的所有处理程序
最后,它调用全局函数pageLoad
(如果定义了一个)
对于每个部分(即AJAX + UpdatePanel)回发,重复步骤2)和3).
所以最后答案pageLoad
是:只是一个方便的捷径Sys.Application.add_load()
.
window.onload
然而,关于它的关系,事情开始变得有趣.从本质上讲,MS需要window.onload
火只后的init
阶段已经完成.但你无法控制浏览器何时触发onload
,因为它与"内容加载"相关联.这被称为" window.onload
问题":
加载所有页面内容(包括图像和其他二进制内容)后,onload事件将触发.如果您的页面包含大量图像,那么在页面变为活动状态之前您可能会看到明显的延迟.
因此,他们刚刚发明了自己的"特殊"功能,可以在事件生命周期的恰当时间点亮并调用它"pageLoad"
.他们用来启动这个自定义事件生命周期的技巧是将调用Sys.Application.initialize()
放在结束标记之前.serverside运行时执行此操作.精明的读者会注意到这个技巧允许MS解决
window.onload
问题,因为你输入的任何代码都pageLoad
将独立于二进制内容(具有IE的一个罕见捕获).
>他们的行为是一样的吗?
从概念上讲,是的,实际上根本没有window.onload
问题.唯一的规则是你应该只放置与你的AJAX控件交互的代码pageLoad
,因为window.onload
它遵循自己的事件轨迹.
>或者是在另一个之前打电话?
它们完全是100%独立的.
>或者会自动调用一个而另一个不会调用吗?
如果你定义了它们,它们都会被调用.
首先要注意的几件事情.MS发明了一种称为"客户端运行时对象" Sys.Application
.它处理提升init
,load
和unload
整个页面的[客户方]寿命事件,如下所示:
Sys.Application.initialize()
开始init
生命周期的一部分.这initialize()
是所有客户端AJAX控件,之后他们准备以编程方式进行交互
Sys.Application
开始load
生命周期的一部分,调用已订阅此事件的所有处理程序
最后,它调用全局函数pageLoad
(如果定义了一个)
对于每个部分(即AJAX + UpdatePanel)回发,重复步骤2)和3).
所以最后答案pageLoad
是:只是一个方便的捷径Sys.Application.add_load()
.
window.onload
然而,关于它的关系,事情开始变得有趣.从本质上讲,MS需要window.onload
火只后的init
阶段已经完成.但你无法控制浏览器何时触发onload
,因为它与"内容加载"相关联.这被称为" window.onload
问题":
加载所有页面内容(包括图像和其他二进制内容)后,onload事件将触发.如果您的页面包含大量图像,那么在页面变为活动状态之前您可能会看到明显的延迟.
因此,他们刚刚发明了自己的"特殊"功能,可以在事件生命周期的恰当时间点亮并调用它"pageLoad"
.他们用来启动这个自定义事件生命周期的技巧是将调用Sys.Application.initialize()
放在结束标记之前.serverside运行时执行此操作.精明的读者会注意到这个技巧允许MS解决
window.onload
问题,因为你输入的任何代码都pageLoad
将独立于二进制内容(具有IE的一个罕见捕获).
>他们的行为是一样的吗?
从概念上讲,是的,实际上根本没有window.onload
问题.唯一的规则是你应该只放置与你的AJAX控件交互的代码pageLoad
,因为window.onload
它遵循自己的事件轨迹.
>或者是在另一个之前打电话?
它们完全是100%独立的.
>或者会自动调用一个而另一个不会调用吗?
如果你定义了它们,它们都会被调用.