我正在考虑在我们的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