2011-06-17 60 views
10

我遇到了一個更改爲使用HTML5 appcache功能的網頁的問題。當頁面上啓用appcache時,Safari會阻止我的跨站點css文件。頁面http://www.ericperrets.info/從我的服務器加載一些圖像/ css文件,並從谷歌網址/服務器加載一些css文件。下面是epi.appcache文件內容使用Safari導致跨站點CSS的HTML5 appcache無法加載

CACHE MANIFEST 
#v2 

CACHE: 
default.css 
/images/bg.gif 
/images/bg2.gif 
/images/external.png 
/images/logo.gif 
/images/mail_48.png 
/images/meme.jpg 
/images/pdficon.gif 
/images/telephone_32.png 
/favicon.ico 
/js/dojo/dojo/dojo.js 

NETWORK: 
Resume%20-%20Eric%20Perret.pdf 
index.html 

此作品在Firefox中查找頁面加載的時候,但是當我嘗試加載它在Safari,它塊http://fonts.googleapis.com/css?family=Reenie+Beanie&v1http://fonts.googleapis.com/css?family=Candal&v1呼叫被封閉的消息

的URL不能正常顯示

不知道爲什麼發生這種情況。

+0

這兩個提到的文件都是私有的,這意味着它只能緩存在用戶瀏覽器中(而不是公共代理等)。這可能與你的問題有關嗎? – 2011-06-21 13:24:39

+0

@Jonas,不知道Google爲什麼使用'Cache-Controle:private'作爲它的CSS文件,'Cache-Controle:public'是它的字體,但這不是我的網站的問題。我沒有明確表示所有其他http內容應該來自網絡,這是更長的路線。 – Eric 2011-06-24 17:01:08

+2

他們使用緩存控制私人,因爲要服務於不同的瀏覽器不同的CSS文件。代理應該使用緩存文件發送給其他用戶,可能還有其他瀏覽器。 – Gerben 2011-07-18 17:42:57

回答

14

瀏覽器使用定義的AppCaches來指定您的網站上存在哪些與瀏覽器訪問的特定頁面相關的文件。將appcache想象成白名單,它列出所有可以訪問的文件以及應該如何訪問它們。

因此,根據我的經驗,當Safari瀏覽器看到AppCache中不存在的Web地址請求時,會嚴格遵循AppCache標準,但它不允許訪問。

要解決此問題,您可以將資源添加到緩存部分或網絡部分。在我看來,更好的選擇是在網絡部分使用通配符「*」路徑,以確保請求不被阻止。

NETWORK: 
* 
http://* 
https://* 
+0

這對我來說非常合適。 我最終什麼事用的就是... 'CACHE MANIFEST #V3 CACHE: /default.css /images/bg.gif /images/bg2.gif /images/external.png /圖像/ logo.gif /images/mail_48.png /images/meme.jpg /images/pdficon.gif /images/telephone_32.png /favicon.ico /js/dojo/dojo/dojo.js 網絡: /Resume%20-%20Eric%20Perret.pdf /index.html * http:// * https:// *' – Eric 2011-06-24 16:47:58

+0

謝謝它適用於我! – yogs 2012-04-19 11:25:02