2012-01-11 119 views
8

我在網站上設置了應用程序緩存,此後不久就實現了我認識到的更激進的方式。我想刪除它。永久。永久刪除HTML5 Appcache清單

我讀過,通過一個完全空的已更改清單文件,使用正確的MIMETYPE將刪除緩存。 編輯:見下文。莫里斯的答案是唯一一致的解決方案。

這是最快,最有效的解決方案嗎?有沒有更好的辦法?

如果您可以指定您是否真的在使用您的答案之前使用了此功能,我真的很感激它 - 在測試期間沒有顯示的含糊不清的文檔和古怪的東西讓我陷入了這種情況。

回答

16

訣竅是首先將HTML頁面中的清單URL更改爲無效,以便瀏覽器在加載時會收到404。確保還要更改原始的清單,否則新的HTML頁面從不下載。瀏覽器無法下載新的清單URL後,您可以從HTML頁面中完全刪除清單設置。

有點古怪,但似乎是刪除現有的清單參考的唯一可靠的方法。

+0

所以其實我是想置,不能刪除該屬性? – 2012-01-11 12:50:51

+1

首先做到這一點,並對原始清單進行更改,否則頁面將不會被下載,並刷新頁面。這將打破清單鏈接,然後您可以完全刪除清單屬性。 – Maurice 2012-01-11 12:55:42

+0

明白了。非常感謝你的幫助。 – 2012-01-11 13:01:16

2

我一直有一個類似的問題,我需要重置更新失敗後的appcache(即強制完全刪除appcache,以便它可以從頭開始重新構建)。

建立在Maurice的答案我向用戶提供一個通常隱藏的鏈接,它打開一個非緩存頁面,它只是寫入一個cookie並將用戶返回到前一個視圖。這個cookie告訴服務器在下一次請求appcache時返回404,然後用戶通過正常的登錄過程。當應用程序下一次成功運行時,它將清除緩存並像往常一樣恢復緩存。

以這種方式使用cookie解決了視圖的主版本卡在appcache中,使得難以向manifest =「」中注入中斷url的問題,即清單url保持不變,但服務器以404迴應,直到另行通知。

+0

有趣。雖然如果您最終希望保留appcache,那麼您可以更改清單,這會導致瀏覽器重新提取所有資產,就像重新開始一樣。 爲了永久消除艙單,莫里斯是正確的。 – 2013-07-03 13:38:10

+0

我的建議實際上只適用於登錄後的應用程序,在這種情況下,使用正常程序(更改清單等)觸發成功更新可能會遇到困難。 – notreadbyhumans 2013-07-07 15:09:04

1

如果您只是想從您身邊移除,您可以通過瀏覽器進行操作。我只能記得在Chrome中如何做到這一點。轉到chrome:// appcache-internals/&刪除所需的文件。你也可以清除緩存& cookies &應該工作。不過,我只在Chrome中測試過。

如果您想要爲所有查看者刪除它,我知道無法檢測它們是否具有舊的緩存版本,但是我知道如Maurice所建議的那樣保留該屬性爲假鏈接將是唯一方法我會知道的;儘管如此,我相信還有另一種方式,很可能是jQuery。

5

截至2015年6月25日我發現返回404不會清除Firefox的現有appcache,並且返回空白的appcache不會清除Chrome的現有appcache。返回下面的appcache似乎可以在IE,Chrome,Safari和Firefox中使用,但是不清楚index.html的「隱式」緩存被禁用的機制是什麼。

NETWORK: 
* 

CACHE: 
FALLBACK: 
+0

這應該被接受爲正確答案。感謝分享! – raphael 2017-03-09 11:16:23

+0

緩存*必須*從'CACHE MANIFEST'開始,然後新行符合規範。至於「禁用'隱式'index.html緩存',我知道的唯一解決方案是包含一個隱藏的iframe,並在iframe中聲明清單(然後iframe中的頁面將被緩存)。我實際上沒有嘗試過,但我把它看作是一個解決方案。 – Nateowami 2017-05-11 10:04:58