我正在考慮在我們的JavaScript實用程序斷言函數中添加alert()。js:瞭解alert()如何影響瀏覽器事件循環
我們是一個ajax沉重的應用程序,我們的框架(Ext)通過使用setInterval輪詢ajax響應而不是等待readystate == 4來實現ajax,這會導致我們所有的ajax回調在setInterval堆棧上下文 - 並且一個異常/斷言通常會失敗。
低級alert()如何影響瀏覽器事件循環?根據定義,消息框必須允許win32事件循環進行抽取(以響應mbox按鈕)。這是否意味着其他瀏覽器事件,比如由我們的框架生成的未來setIntervals,調整事件大小等,是否會觸發?這會對我造成麻煩嗎?
IIRC:您可以使用FF2和FF3.5來查看我正在談論的差異。
alert('1');
setTimeout(function(){alert('2');}, 10);
alert('3');
FF 3.5顯示1-3-2。 FF2 [1]顯示1-2(其中2和3同時堆疊在彼此之上)。我們可以在IE8中複製1-2 & 3,同時從activex啓動win32 mbox,而不是在當天發出havok的警報,我想確保我們不會再次沿着這條路走下去。
任何人都可以向我指出解釋此行爲的具體低級資源,此處預期的行爲以及低級別發生了什麼,包括爲何行爲在FF版本中發生更改?
[1]你可以在Spoon.net上覆制這個,我現在無法工作。我剛剛用FF 2.0.0.20在vm上重新編譯了它。
優秀的問題。根據我的經驗,「alert」的實現在不同瀏覽器上有很大不同。一般來說,我會避免使用自定義(即jQuery UI風格)對話框的「alert」。 – 2011-06-07 17:19:12
@Oliver - 是的,我們實際上選擇使用基於DOM的彈出窗口,但我仍然想要了解警報內部。 – 2011-06-07 18:56:38
*「根據定義,消息箱必須允許win32事件循環泵」* - 某些操作系統 - 例如Mac OS X - 使用嵌套的事件循環。警報可能會運行阻塞主事件循環的[模式事件循環](http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/WinPanel/Concepts/UsingModalWindows.html)。有些瀏覽器可能會爲對話框做類似的事情。 – s4y 2011-06-08 21:10:58