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

时间:2014-09-05 07:32:09

标签: requirejs internet-explorer-9 handlebars.js xdomainrequest

我们正在开发一个使用Require.js和Handlebars的Web应用程序,除了(当然)IE9之外,它在所有浏览器中都能正常工作。在IE9中,Handlebars Require.js模块(hbs.js)加载Handlebars资源的请求随机中止 - 有时,它们成功,当它们失败时,没有明确的模式来确定哪些请求失败(除了只有Handlebars请求失败的事实;所有对JavaScript资源的请求都成功)。在“网络”窗格中,请求列为(Aborted),发起者为(Pending...),没有进一步的信息。

这可能不是配置错误,因为它可以在其他任何地方使用,而是框架的浏览器兼容性问题,所以我省略了配置。有没有人知道发生了什么?

(注意:经过几个小时的挖掘后我已经找到了解决方案,并且会自己发布,以便其他可能遇到同样问题的人使用。解决方案已经描述为here和{{3}但是,找到这些答案需要您已经发现XDomainRequest可能是问题,这需要深入研究框架代码。)

1 个答案:

答案 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中的