2011-04-12 117 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发生之前在焦点位于第一个选项卡上时触发,重点在第二个选项卡