0

我們正在開發一個使用Require.js和Handlebars的Web應用程序,並且它在所有瀏覽器(當然)除IE9以外都能正常工作。在IE9中,Handlebars Require.js模塊(hbs.js)加載Handlebars資源的請求會隨機中止 - 有時它們會成功,並且在它們失敗時,沒有明確的模式來指出哪些請求失敗(除了事實上,只有Handlebars請求失敗;所有對JavaScript資源的請求都成功)。在「網絡」窗格中,該請求列爲(Aborted),啓動程序爲(Pending...),但沒有進一步的信息。在IE9中對Handlebars資源的require.js請求被隨機中止

這可能不是一個配置錯誤,因爲它可以在其他地方使用,但是與框架的瀏覽器兼容性有關,所以我省略了配置。有誰知道發生了什麼? (注意:我已經在挖掘幾個小時後找到了解決方案,並且會自己發佈,以便其他人可能遇到同樣的問題。解決方案已經被描述爲herehere;但是,找到這些答案要求你已經知道XDomainRequest可能是問題,這需要挖掘框架代碼。)

回答

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

相關問題