2014-09-01 96 views
0

在javascript中,我們需要在運行代碼之前等待窗口onload事件?爲什麼要等待window.onload?

什麼有用的事情可以做,而無需等待?

+1

你的意思是不是'DOMReady',或者一般? – 2014-09-01 12:36:49

+0

如果你的腳本是BEFORE HTML,那麼你必須等待它加載(否則你會嘗試訪問不存在的東西)。如果它是在標記之後,那麼你可能需要僅等待異步上下文(比如圖像),因爲它們會參與佈局。最後,DOM已經準備就緒並且只有在它已經被解析時纔可用(但是當它已經準備就緒時,你可以在onload之前使用它)。 – 2014-09-01 12:38:11

+0

@FrédéricHamidi - 我的意思是一般 – 2014-09-01 12:39:42

回答

3

在JavaScript中的哪些情況下,我們是否需要在運行代碼之前等待窗口onload事件?

  • 如果您要訪問的節點在#document
  • 如果你想要得到的值,如
  • 如果你想避免競爭條件附加在頁面的高度或寬度新事物的#document
  • 基本上,一切DOM相關特定頁面

什麼有用的事情可以做,而無需等待?

  • 計算行動
  • 聲明功能,初始化變量
  • 測試功能的支持,其中包括polyfills
  • 基本上,一切非DOM相關,或DOM涉及到具體的瀏覽器,但不是頁面
1

從一個相關的SO帖子:window.onload vs. body.onload vs. document.onready

window.onload會等待,直到所有資產都完成下載,如圖像和腳本。

還有一個「DOM ready」事件,允許更快地訪問dom,因爲它只會等到您可以通過API訪問DOM。

0

如果您的代碼需要執行其他文件(如庫,框架或公開全局的文件),您應該始終等待瀏覽器完成下載所有內容。

所以在大多數情況下,你應該這樣做。你可以找到不需要這種邊緣的情況,但這非常罕見,並且在人們對時間的感知中花費不多。

1

當代碼需要訪問/修改DOM和所有資源(圖像,字體等)時,需要在運行代碼之前使用window onload事件。您也可以使用jQuery(或同等版本)&(document).ready()。它比window onload早啓動,因此用戶會覺得網站加載速度更快。不同之處在於文檔準備好只有DOM樹已準備好,但資產可能尚未加載。在窗口onload上,一切已經加載。

在文檔準備好之前,您可能還會做一些事情。例如,如果您需要爲用戶創建某種唯一的ID並設置cookie,則無需等待DOM。或者如果你想基於cookie做一些事情(只要它不接觸DOM)。或者您需要從API加載一些外部數據(但您需要等待DOM才能顯示該數據)。一般來說,任何不接觸DOM的東西都可以。