Dot-Net

ASP.NET AJAX pageLoad() 和 JavaScript window.onload 有什麼區別?

  • December 23, 2010

我正在使用 ASP.NET AJAX 並想了解這兩個片段之間的區別:

function pageLoad(sender, eventArgs) { }

window.onload = function() { }
  • 他們的行為一樣嗎?
  • 還是一個在另一個之前被呼叫?
  • 還是會自動呼叫一個而另一個不會?

首先要注意幾點。MS 發明了一種“客戶端執行時對象”,稱為Sys.Application. 它在整個頁面的 [clientside] 生命週期中處理 raise 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 只需要在階段完成window.onload觸發。但是您無法控制瀏覽器何時觸發,因為它與*“內容載入”*相關聯。這被稱為問題”init``onloadwindow.onload

onload 事件在所有頁面內容載入後觸發(包括圖像和其他二進制內容)。如果您的頁麵包含大量圖像,那麼您可能會在頁面變為活動狀態之前看到明顯的延遲。

因此,他們只是發明了自己的“特殊”功能,在事件生命週期中的正確時間觸發並呼叫它"pageLoad"。他們用來啟動這個自定義事件生命週期的技巧是將呼叫Sys.Application.initialize()放在結束</form>標記之前。伺服器端執行時執行此操作。精明的讀者會注意到這個技巧允許 MS 解決window.onload問題,因為您輸入的任何程式碼pageLoad都會獨立於二進制內容觸發(對於 IE 有一個罕見的擷取)。

> 他們的行為是否相同?

從概念上講是的,實際上根本不是由於上述window.onload問題。唯一的規則是您應該只放入與您的 AJAX 控制項互動的程式碼pageLoad,因為window.onload它遵循它自己的事件軌跡。

> 或者是一個在另一個之前被呼叫?

他們是完全、100% 獨立的。

> 或者一個會被自動呼叫而另一個不會?

如果你定義了它們,它們都會被呼叫。

引用自:https://stackoverflow.com/questions/602441