[英]What's the different between ASP.NET AJAX pageLoad() and JavaScript window.onload?
我正在使用ASP.NET AJAX,並希望了解這兩個片段之間的區別:
function pageLoad(sender, eventArgs) { }
和
window.onload = function() { }
首先要注意的幾件事情。 MS發明了一種名為Sys.Application
的“客戶端運行時對象”。 它處理在頁面的[clientside]生命周期內提升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只需要在init
階段完成后才能觸發window.onload
。 但是你無法控制瀏覽器何時觸發onload
,因為它與“內容加載”相關聯 。 這被稱為“ window.onload
問題” :
加載所有頁面內容(包括圖像和其他二進制內容)后,onload事件將觸發。 如果您的頁面包含大量圖像,那么在頁面變為活動狀態之前您可能會看到明顯的延遲。
因此,他們剛剛發明了自己的“特殊”功能,可以在事件生命周期的正確時間觸發,並稱之為"pageLoad"
。 他們用來啟動這個自定義事件生命周期的技巧是在結束</form>
標記之前調用Sys.Application.initialize()
。 serverside運行時執行此操作。 精明的讀者會注意到這個技巧允許MS解決window.onload
問題,因為你放入pageLoad
任何代碼都將獨立於二進制內容( 具有IE的一個罕見捕獲 )。
>他們的行為是一樣的嗎?
概念上是的,實際上根本沒有因為window.onload
問題。 唯一的規則是你應該只在pageLoad
放置與你的AJAX控件交互的代碼,因為window.onload
遵循它自己的事件軌跡。
>或者是在另一個之前打電話?
它們完全是100%獨立的。
>或者會自動調用一個而另一個不會調用嗎?
如果你定義了它們,它們都會被調用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.