周三,我维护的 AJAXy CRM 系统对很多用户都崩溃了,因为 Firefox 开始报告“在窗口上下文中的同步模式下不支持使用 XMLHttpRequest 的超时属性”。其他主要浏览器仍然可以正常工作,因此我建议人们不要使用 Firefox。
据我了解,同步请求是一件坏事,所以我只能假设最近对 Firefox 的一些更新已经阻止它适应坏事。之前的所有讨论(此处和网络上)都暗示将 timeout 属性与同步 XMLHttpRequest 对象一起使用根本不应该起作用,这让我想知道为什么它显然会起作用(截至周三在 Firefox 上除外)。
其他浏览器/旧 Firefox 是否真的在“不应该”的地方实现了超时行为,或者他们只是忽略异常并继续执行(而不是像新的 Firefox 那样退出)?
编辑:我现在无法找到代码,但它是这样的:
“this”是复杂的东西,大概是从 XMLHTTPRequest 继承的,“c”是指特定 AJAX 请求或其他东西的特定对象。我会坦白说我对 Javascript 和这个基于 Sugar 的特定 CRM 知之甚少,但代码的本质很简单。这是一种通用的面向对象的请求方式,当请求超时时,这个特定的 4 行左右的代码就会被处理。我的印象是这是一个抽象的基础,特定的请求(或请求实体)应该从它专门化。Firefox Javascript 引擎在.if (c.somekindoftimeouthandler !== "unassigned" && this.timeout) {
c.timeout = this.timeout
//more stuff about the handler etc...
}this.timeout
我相信我的问题的主旨更笼统 - 考虑到使用超时同步 XHR 的“坏处”,各种浏览器如何处理它?