2010-10-22 52 views
4

我有一個使用長輪詢彗星連接的網站。連接需要在頁面加載時/之後設置。儘管我努力阻止它,但許多瀏覽器認爲長輪詢請求是頁面加載機制的一部分,因此使頁面處於「加載」階段。在Safari中,這會導致進度條(url字段後面)無法完成。在Chrome中,圖標顯示爲旋轉加載圖標。更有問題的是iPhone上的移動Safari,它不允許在加載時隱藏url字段。移動android在某些設備上有類似的問題。總而言之,行爲難以重現,並且似乎依賴於瀏覽器/平臺/連接速度/等等。現在,我的代碼啓動了在window.onLoad觸發器的之後的長輪詢10msecs 。這似乎經常運作,但並非總是如此。我懷疑它可能與加載一些外部(圖像/ JavaScript)資源有關,但可以說onLoad事件在之後被觸發這些完全加載。什麼時候(移動)Safari/Chrome考慮使用Comet加載的頁面?

任何有關如何強制這些瀏覽器考慮我的頁面加載的指針?理想情況下,可以以某種方式將xmlhttprequest標記爲彗星狀,但這不是功能:)。

+0

另見這個問題: http://stackoverflow.com/questions/1064782/stop-the-browser-throbber-of-doom-while -loading-comet-server-push-iframe – ralfstx 2012-03-12 20:55:45

回答

0

我們已成功通過ajax長輪詢請求刪除Safari 5.1.5中的「加載」指示符。不幸的是,Chrome仍然一直顯示加載指示符。對於chrome,我們的團隊選擇了簡單地更改整個body元素(例如:十字準線或自定義光標)上的css光標值 - 一個可怕的「黑客」 - 但至少用戶不會看到加載鼠標光標在系統上。

4

我一直有同樣的問題,結果發現,如果你允許網頁退出其onload處理發行的長輪詢AJAX請求之前,一切工作正常,頁面不會重新回到加載狀態。

因此,例如,通常什麼會是

$(document).ready(function() { $.ajax(...); });

將成爲

$(document).ready(function() setTimeout(function() { $.ajax(...); }, 0); });

WebKit中的特定情況下,我認爲,$(文件)。就緒是window.onload的同義詞。所以這就是爲什麼它很重要。

這爲我工作在iPad1,1與iOS 5

+0

雖然使用0並沒有爲我解決它,但增加了一個延遲就完成了。 Windows上的Safari 5.1.4上也存在「錯誤」 – BennyM 2012-07-11 16:29:37

相關問題