2012-04-19 58 views
1

對於某些Firefox擴展,儘可能早地獲取頁面內容以進行修改是有意義的,而對於其他擴展儘可能晚(例如,當其他擴展可以用他們的修改)。很明顯,總會有一些擴展想要成爲「第一」或「最後」,但我很難在網上找到涵蓋此內容的材料。對於addEventListener(「load」,...),我只能發現事件處理程序被調用的順序是未定義的。如果addEventListener沒有辦法,那麼在Firefox擴展中,還有哪些其他選項可以影響處理內容的早/晚?影響Firefox擴展中的頁面加載處理程序的順序

回答

1

事件監聽器的觸發順序實際上是未定義的,您不能依賴任何特定順序。就擴展而言,最好的選擇是以這樣的方式編寫代碼,以至於您不關心其他擴展是否已經完成。除此之外,你可以選擇附加哪個事件:

  • chrome-document-global-created/content-document-global-created notifications在時間最早可能的點,當剛剛創建的窗口運行 - 但窗口的內容將不會推出。如果代碼是通過覆蓋窗口加載的,則此選項顯然不是您可以使用的,加載覆蓋圖稍後會發生。
  • DOMContentLoaded事件發生後,窗口的DOM可以被訪問。
  • load事件發生後,一旦所有相關元素加載。
  • 如果您希望在稍後運行,可以選擇在load事件處理程序中調用setTimeout(..., 0) - 超時保證在所有load事件處理程序之後執行。