我们正在开发一个使用Require.js和Handlebars的web应用程序,它在除IE9之外的所有浏览器中都能正常工作。在IE9中,Handlebars Require.js模块(hbs.js
)为加载Handlebars资源而发出的请求是随机中止的——有时它们会成功,而当它们失败时,没有明确的请求失败模式(除了只有Handlebars请求失败;所有对JavaScript资源的请求都会成功)。在"网络"窗格中,请求列为(Aborted)
,启动器为(Pending...)
,没有其他信息。
这可能不是配置错误,因为它在其他地方都有效,而是框架的浏览器兼容性问题,所以我省略了配置。有人知道发生了什么事吗?
(注意:经过几个小时的挖掘,我已经找到了解决方案,为了其他可能遇到同样问题的人的利益,我会自己发布。解决方案已经在这里和这里描述过了;然而,找到这些答案需要你已经发现XDomainRequest
可能是问题所在,这需要深入研究框架代码。)
hbs.js
在旧IE版本中使用XDomainRequest
。事实证明,在IE9中,当XDomainRequest
请求没有立即完成时,IE9将尝试激发onprogress
回调,如果没有回调,它将中止请求。换句话说,如果您没有订阅XDomainRequest.onprogress
回调,您的请求将在IE9中随机失败。我们使用的hbs.js
版本没有订阅此事件(在最近的版本中已经修复),添加订阅解决了问题:
xhr.onprogress = function() {};
之后立即
if (useXdr) {
xhr.onload = function () { callback(xhr.responseText); }
在CCD_ 11中。