簡體   English   中英

ASP.NET AJAX pageLoad()和JavaScript window.onload有什么不同?

[英]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]生命周期內提升initloadunload事件,如下所示:

  1. Sys.Application.initialize()開始生命周期的init部分。 這個initialize()是所有客戶端的AJAX控件,之后他們准備以編程方式進行交互
  2. Sys.Application開始生命周期的load部分,調用已訂閱此事件的所有處理程序
  3. 最后,它調用全局函數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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM