0

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

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

(注意:经过几个小时的挖掘,我已经找到了解决方案,并将自己发布以供可能遇到相同问题的其他人使用。解决方案已在此处此处描述;但是,找到这些答案需要您有已经发现这XDomainRequest可能是问题所在,这需要深入研究框架代码。)

4

1 回答 1

2

hbs.jsXDomainRequest在旧 IE 版本中使用。事实证明,在 IE9 中,当XDomainRequest请求没有立即完成时,IE9 将尝试触发onprogress回调,如果回调不存在,它将中止请求。换句话说,如果您不订阅XDomainRequest.onprogress回调,您的请求将在 IE9 中随机失败。我们使用的hbs.js版本没有订阅这个事件(最近版本已经修复),添加订阅解决了这个问题:

xhr.onprogress = function() {};

之后立马

if (useXdr) {
    xhr.onload = function () { callback(xhr.responseText); }

hbs.js.

于 2014-09-05T07:32:48.890 回答