代码之家  ›  专栏  ›  技术社区  ›  Aasmund Eldhuset

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

  •  0
  • Aasmund Eldhuset  · 技术社区  · 10 年前

    我们正在开发一个使用Require.js和Handlebars的web应用程序,它可以在除IE9之外的所有浏览器中正常工作。在IE9中,HandlebarsRequire.js模块发出的请求( hbs.js )加载Handlebars资源会被随机中止-有时,它们会成功,当它们失败时,对于哪些请求失败没有明确的模式(除了只有Handlebars请求失败;所有JavaScript资源请求都成功)。在“网络”窗格中,请求列为 (Aborted) ,并且启动器是 (Pending...) ,无进一步信息。

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

    (注:经过几个小时的挖掘,我已经找到了解决方案,为了可能遇到同样问题的其他人的利益,我会自己发布 here here ; 然而,找到这些答案需要你已经弄清楚了 XDomainRequest 可能是问题所在,这需要深入研究框架代码。)

    1 回复  |  直到 7 年前
        1
  •  2
  •   Aasmund Eldhuset    10 年前

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

    xhr.onprogress = function() {};
    

    紧接着

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

    在里面 哈佛商学院 .