2012-10-23 131 views
1

我正在處理的網站看似隨機停止加載頁面(僅顯示白頁)和圖像(僅顯示藍色問號,但佔位符已在正確的尺寸)。Safari停止加載

當它這樣做時,它會在Web檢查器中給出'狀態403,未修改'消息。在這是一個頁面的情況下,它只加載了幾個字節,我不能從開發者菜單中選擇'show source'。當我點擊「重新加載」時,該頁面即刻存在,就好像已經被緩存了一樣。這也發生在清除我的緩存後,並且錯誤在我嘗試加載的第一頁上顯示。

通常會發生這種情況,當我點擊一個鏈接,而頁面尚未完成加載。在時間軸上,我發現雖然url已經設置爲新頁面,但Safari仍然會加載舊頁面中的各種內容,並最終嘗試加載新頁面。

如果圖片顯示不正確,則表示它們已加載(「資源」概覽中未顯示錯誤)。另外,重裝後,一切都在那裏。

我搜索了很多,看起來很多人已經很多年了,Safari瀏覽器和圖像沒有被完全加載或顯示爲只是一個空白頁面的問題。儘管如此,這些問題和投訴中提到的網站在我的Safari瀏覽器上顯示得很好(Ebay被提及很多,以及谷歌圖片)。

我嘗試了許多不同的事情,例如預加載,延遲加載(將圖像顯示時將src設置爲data-src),重新加載(在圖像顯示後將src設置爲自身)。另外,當我在Safari開發者菜單中開啓緩存時,它似乎沒有什麼區別。我沒有嘗試任何在蘋果論壇上提供的DNS解決方案,因爲我想在代碼結束時解決這個問題。

當你看着我的JS你會看到有一些調整大小和延遲加載進行。即使我關閉所有這些東西,問題仍然存在。我意識到圖像非常沉重(幾乎所有圖像都在500kb以上) - 我仍然希望無論圖像大小如何都會有解決方案,因爲內容不是我將來可以完全控制的內容。

頁面: http://www.alique.nl/archive 您必須單擊縮略圖並瀏覽圖像以查看錯誤。由於它發生在隨機頁面(至少看似),我不能指向一個更具體的頁面。

這是js文件: http://www.alique.nl/js/lib.js

+0

不穩定的結果通常是網絡問題,而不是javascript問題。但是,對於這種情況,腳本可能沒有足夠的錯誤處理。 – Jay

+0

我想到了這一點 - 雖然這可能是圖像的情況,但對於'白頁'來說,它是不可能的,因爲Safari從來沒有將它用於腳本(在腳註中)。加載的幾個字節強烈地表明瞭一些'標題'對我來說。 我在Apple論壇發現了這個主題:https://discussions.apple.com/thread/4151483?start=30&tstart=0 有沒有人有任何安裝OS X 10.8.2的經驗(因爲它還沒有提供給我)與Safari加載問題有關? –

回答

0

我通過刪除用於組合我所有.css和.js文件的組合腳本解決了該問題: http://rakaz.nl/projects/combine/combine.phps

我不知道爲什麼這解決了它 - 我沒有改變任何.css或.js文件本身。基本上,組合腳本只是將所有文件一起過濾到一個大的新文件中,並且不會爲現有文件添加任何新內容。

這對我來說也並沒有意義,錯誤發生得如此隨機:不是每次安裝Safari,也不總是在相同的頁面上或使用相同的圖片。關閉.htaccess中的緩存確實改變了一些東西(它使它可以在更多的計算機上工作,但不是所有的),但影響了以前沒有麻煩的其他圖像(如徽標,它不會加載隨機頁面)。

這似乎肯定有一個奇怪的問題與緩存& Safari。對於任何遇到類似問題的人,我會建議關閉任何與遠程緩存(例如gzip等)有關的任何事情,以找出導致問題的原因。

0

當服務器返回一個304 Not Modified狀態似乎錯了MIME類型(text/plain)在Safari中得到了規定(見Web檢查)。這可以防止圖像正確顯示。在Mac和Windows中都會發生(在Chrome中似乎不會發生)。雖然我無法重現一個空白頁面。

一個可能的解決方案是明確定義MIME類型的圖像在.htaccess文件有:

# Force correct mime-types 
AddType image/gif .gif .GIF 
AddType image/jpeg .jpeg .jpg .jpe .JPG 

MIME類型的完整列表可在http://www.htaccess-guide.com/adding-mime-types/找到。但是,這可能不起作用,因爲這可能是Safari中的一個錯誤,因爲原始內容是以正確的MIME類型提供的。

一種解決方法,而是那麼直接的解決方案,就是完全在.htaccess再次禁用緩存:

# Disable caching of resources in user-agent: 
FileETag None 
<ifModule mod_headers.c> 
    Header unset ETag 
    Header unset Last-Modified 
    Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate" 
    Header set Pragma "no-cache" 
    Header set Expires "Wed, 11 Jan 1984 05:00:00 GMT" 
</ifModule> 

或者在PHP中:

// Disable caching of resources in user-agent: 
header('ETag: ' . md5(time())); 
header("Expires: Wed, 11 Jan 1984 05:00:00 GMT"); 
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); 
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0"); 
header("Cache-Control: post-check=0, pre-check=0", false); 
header("Pragma: no-cache"); 

這可能涉及到這樣一個問題:Debug message "Resource interpreted as other but transferred with MIME type application/javascript"

+0

它確實影響了錯誤 - 在我測試過的某些計算機上,白頁錯誤消失了,圖像似乎加載得更好。在其他計算機上,之前完美加載的圖像(如徽標)突然停止加載。 現在我正在預先載入document.ready上的所有圖像。我在我的.htaccess中強制使用MIME類型。 Safari中的問題依然存在。 –