ASP.NET AJAX pageLoad() 和 JavaScript window.onload 有什麼區別?
我正在使用 ASP.NET AJAX 並想了解這兩個片段之間的區別:
function pageLoad(sender, eventArgs) { }和
window.onload = function() { }
- 他們的行為一樣嗎?
- 還是一個在另一個之前被呼叫?
- 還是會自動呼叫一個而另一個不會?
首先要注意幾點。MS 發明了一種“客戶端執行時對象”,稱為
Sys.Application. 它在整個頁面的 [clientside] 生命週期中處理 raiseinit、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``onloadwindow.onloadonload 事件在所有頁面內容載入後觸發(包括圖像和其他二進制內容)。如果您的頁麵包含大量圖像,那麼您可能會在頁面變為活動狀態之前看到明顯的延遲。
因此,他們只是發明了自己的“特殊”功能,在事件生命週期中的正確時間觸發並呼叫它
"pageLoad"。他們用來啟動這個自定義事件生命週期的技巧是將呼叫Sys.Application.initialize()放在結束</form>標記之前。伺服器端執行時執行此操作。精明的讀者會注意到這個技巧允許 MS 解決window.onload問題,因為您輸入的任何程式碼pageLoad都會獨立於二進制內容觸發(對於 IE 有一個罕見的擷取)。> 他們的行為是否相同?
從概念上講是的,實際上根本不是由於上述
window.onload問題。唯一的規則是您應該只放入與您的 AJAX 控制項互動的程式碼pageLoad,因為window.onload它遵循它自己的事件軌跡。> 或者是一個在另一個之前被呼叫?
他們是完全、100% 獨立的。
> 或者一個會被自動呼叫而另一個不會?
如果你定義了它們,它們都會被呼叫。