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