2011-04-12 111 views
0

我有以下代碼。javascript加載事件執行順序

 
//create a tab and active it 
var tab = gBrowser.addTab("chrome://xxx/content/html/xxx.html"); 
gBrowser.selectedTab = tab 
var newTabBrowser = gBrowser.getBrowserForTab(gBrowser.selectedTab); 
newTabBrowser.addEventListener("load", function() { 
    //event 1.   
    }, true); 

其中xxx.html有

 

$(document).ready(function(){ 
     //event 2 
}); 
$(window).load(function(){ 
    //event 3 
}); 

據我所知,事件2事件之前發射3 和事件1是由事件發生前3發射的警報(),任何人都可以給我解釋一下之所以如此。或者1和3的順序是不可預測的。謝謝。

+0

快速問題'addEventListener'只綁定處理程序,爲什麼它被觸發? – 2011-04-12 19:32:07

+0

請參閱:https:/ /developer.mozilla.org/en/DOM/element.addEventListener – user200340 2011-04-13 09:05:06

回答

0

不太確定事件1是什麼 - 我猜這是一個Firefox插件,因此只要標籤本身加載而不是其中的文檔就會觸發它。

只要完整的HTML DOM準備就緒,但在所有外部資源加載之前(例如圖像和樣式表),事件2都會觸發。事件3只會在所有外部資源完成加載時觸發。

+0

事件1是Firefox插件。 MDN Doc中心解釋說newTabBrowser.addEventListener(「load」,function(){}); 「如果你想處理新打開的標籤的內容,你需要等到內容加載完成。」我對「內容加載完成」感到困惑。如果內容意味着HTML DOM和圖像和css,那麼我認爲事件1將在事件3之前觸發,因爲事件1是先綁定的。仍然不確定。 – user200340 2011-04-13 08:37:36

0

面向對象或事件驅動的本質不一定是順序的。

$(document).ready()表示頁面完全準備好後再繼續。

$(窗口).load(函數()是指頁面中所呈現的過程。

我希望「準備着手進一步」到來之前「頁面中所呈現的過程中,」在至少直到下一個版本的瀏覽器,但我不會建議編碼,就好像它是一個序列

可能有趣的是,如果您的事件1在事件3發生之前在焦點位於第一個選項卡上時觸發,重點在第二個選項卡