Asp.net

任何人都有解決 Internet Explorer 上“剩餘 n 項”問題的想法嗎?

  • April 9, 2009

在我的 ASP.Net 應用程序中,它是 javascript 和 jQuery,但也使用母版頁和 .Net Ajax 片段,我一直在 IE 6(有時是 IE 7)的狀態欄上看到消息“剩餘 2 項”或“剩餘 15 項”,然後是“正在載入somegraphicsfile.png|gif ”。此消息永遠不會消失,並且可能會或可能不會阻止某些頁面功能執行(它肯定似乎陷入困境,但我並不積極)。

只需刷新 .aspx 年齡,我就可以在 99% 的情況下導致這種情況發生,但是項目的數量,有時,它提到的文件會有所不同。通常是 2、3、12、13 或 15。

我用Google搜尋了答案,有幾個建議或解釋。其中一些對我們沒有用,而另一些對我們實施或嘗試不切實際。

以下是一些想法/理論:

  • IE 沒有正確記憶體圖像,因此如果圖像在頁面上重複,它會反复詢問相同的圖像,並且伺服器假定它應該在本地記憶體,因為它已經在該頁面上下文中提供了它。IE 可以正確顯示圖像,但會坐下來等待永遠不會出現的伺服器響應。通常,它說它正在等待的文件會在頁面上重複。
  • 該頁面使用具有透明度的 PNG 圖形。確實如此,但它們是 jQuery-UI Themeroller 生成的圖形,根據 jQuery-UI 人員的說法,它是 IE 安全的。jQuery-UI 組件是唯一使用 PNG 的東西。如果有幫助,我們所有的 PNG 引用都在 CSS 中。我已經將一些圖形從 PNG 更改為 GIF,但很可能會說它正在等待somegraphicsfile.png和等待somegraphicsfile.gif
  • 圖像是在 CSS 和/或 JavaScript 中指定的,但在目前未顯示的事物上(例如顯示:無項目)。這可能是真的,但如果是這樣,那麼我認為預載入圖像會起作用,但到目前為止,添加預載入器並沒有任何好處。
  • IIS 的記憶體策略使瀏覽器感到困惑。如果這是真的,那麼只有微軟伺服器軟體與微軟的瀏覽器有問題(這一點都不讓我感到驚訝)。不幸的是,我對託管應用程序的 IIS 配置沒有太多控制權。

有沒有人看到這一點並找到了對抗它的方法?特別是在帶有 jQuery 和 jQuery-UI 的 ASP.Net 應用程序上?

更新

另一個數據點:在至少一個頁面上,僅註釋掉 jQuery-UI Datepicker 組件設置會導致問題消失,但我不認為(或者至少我不確定)是否可以解決所有問題的頁面。如果它確實“修復”了它們,我將不得不換掉外掛,因為該功能需要在那裡。目前在 IE6/7 上似乎沒有針對 jQuery-UI 的任何未解決問題…

更新 2

我檢查了 IIS 設置,並沒有在我的任何文件夾上設置“啟用內容過期” 。取消選中該設置是解決此問題的常見建議。

我有另一個更簡單的頁面,我可以始終在該頁面上創建錯誤。我正在使用 jQuery-UI 1.6rc6 文件(儘管我也嘗試過 jQuery-UI 1.7.1 並獲得相同的結果)。僅當我刷新包含 jQuery-UI Datepicker 的頁面時才會出現此問題。如果我註釋掉 Datepicker 設置,問題就會消失。當我這樣做時,我注意到以下幾點:

  1. 此頁面始終顯示“(剩餘 1 項)下載圖片 http:///images/Calendar_scheduleHS.gif”,但僅在重新載入時顯示。
  2. 當我查看 HTTP 日誌記錄時,我發現它每次動態打開時都會從伺服器請求該圖像,而不考慮記憶體。
  3. 該圖形的所有請求都已完成並正確返回圖形。沒有一個標記為程式碼 200 或 304(表示伺服器告訴 IE 使用記憶體版本)。為什麼它說在所有請求都完成後等待該圖形,我不知道。
  4. 頁面上有一個其他圖形(UI PNG 文件之一),其程式碼為 304(未修改)。在我設法記錄“剩餘 2 項”的 HTTP 流量的另一個頁面上,兩個不同的圖形文件(兩個 UI PNG)也有 304(但也沒有列為“正在下載”的那個。
  5. 這個錯誤不是無害的——頁面沒有完全響應。例如,如果我點擊應該執行客戶端操作的按鈕之一,頁面會刷新。
  6. 離開頁面並返回不會產生錯誤。
  7. 我已將腳本和腳本引用移至內容底部,這不會影響此問題。該腳本仍在 $(document).ready() 中執行(除非我絕對必須這樣做,否則它太毛茸茸了)。

最終更新和答案

下面有很多很好的答案和建議,但都不是我們的問題。最接近的一個(也是讓我找到解決方案的那個)是關於長期執行的 JavaScript 的,所以我在那裡授予了賞金(我想我本可以自己回答這個問題,但我寧願獎勵導致解決方案的資訊) .

這是我們的解決方案:我們在 ASP.Net 母版頁中包含的腳本中的 $(document).ready 事件上創建了多個 jQueryUI 日期選擇器。在此客戶端頁面上,本地腳本的 $(document).ready 事件具有在某些條件下破壞日期選擇器的腳本。我們不得不使用“destroy”,因為之前版本的 datepicker 有“disable”的問題。當我們升級到最新版本的 jQuery UI (1.7.1) 並將日期選擇器的“destroy”替換為“disable”時,問題就消失了(或者大部分消失了——如果你在頁面上做的事情太快了)正在載入,仍然可以獲得“剩餘n項”狀態)。

我對發生的事情的理論是這樣的:

  1. 頁面內容載入並有 12 個左右帶有 datepicker 類的文本框。
  2. 母版頁腳本在這些文本框上創建日期選擇器。
  3. IE 將每個日曆圖形的請求單獨排隊,因為 IE 不知道如何正確記憶體動態圖像請求。
  4. 在處理請求之前,客戶區腳本會銷毀這些日期選擇器,因此不再需要圖形。
  5. IE 留下了一些它不知道如何處理的孤立請求。

我之前遇到過類似的問題,這是由於頁面中間有一個長時間執行的 JS 片段,瀏覽器在完成下載站點的其他文件之前等待它完成執行。

我不確定這對你來說是否是一個問題,但它以類似的方式表現出來。

如果您在程式碼中的任何地方使用行為(或您使用的庫使用它們),例如

<style>
 body * {
   behavior:url(anyfile.htc);
 }
</style>

然後沒有我知道的**解決方案,並且****在 IE 回饋中送出的關於連接**IE8(和 IE7)的錯誤報告被兩個版本拒絕,並帶有以下一攬子罐頭聲明:

這是 IE 中的一個已知錯誤,也發生在以前的 IE 版本中。您在狀態欄中看到數百個請求的原因是 IE 試圖為頁面上的每個元素一遍又一遍地從磁碟讀取 htc 文件。不幸的是,目前我們不打算解決這個問題。我們將在 IE 的未來版本中考慮這一點。

最好的問候, IE 團隊

由於這與 IE7 開發收到的回復相同,因此我不會屏住呼吸來解決這個問題。

更新:

基於您的更新說明的另一種想法。如果頁面響應不是很靈敏,就好像它仍在載入一樣,檢查渲染的 DOM 內容是否有任何呼叫document.write() {您可能沒有添加它們,但 lib 可能有}。

如果它們存在,請嘗試document.close();在它們完成後添加一條語句,這將告訴瀏覽器您已“完成”渲染。

PS這裡是一個可以保存為書籤的連結(右鍵點擊“添加到收藏夾…”),它將向您顯示IE看到的生成的DOM(醜陋的quoteLess = CaMelCaSeMeSS)對結果進行搜尋以找到任何可能導致問題的古怪程式碼。

IE Generated Source:(添加這個作為任何書籤的位置,編輯器不會讓我連結它)

javascript:'<xmp>'+window.document.body.parentNode.outerHTML+'</xmp>';

引用自:https://stackoverflow.com/questions/734824