对Handlebars资源的Require.js请求在IE9中被随机中止



我们正在开发一个使用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中。

相关内容

  • 没有找到相关文章

最新更新