[英]Updating Offline Cache (Chrome On Mobile)
下午全部
有點背景-我正在為一家公司創建自定義日歷,可以在該日歷中安排工作,工程師可以通過移動設備訪問該日歷,以了解他們的去向和時間。 他們以前使用過Google日歷,但現在想要定制一些東西。
一切正常,直到有人失去電話信號並在Chrome中顯示一個可怕的脫機頁面並且無法訪問任何信息為止。 我想要做的是讓它保存日歷的脫機版本,並且在他們以更好的連接重新訪問它時也進行更新-因為工作時間經常更改。
我曾嘗試保存頁面並在Chrome中啟用離線模式,但是直到您手動清除緩存后頁面才會更新,因此效果不佳。
我嘗試添加一些JavaScript來硬刷新頁面,希望它清除瀏覽器緩存,但又不會更新頁面。
<script>location.reload(true);</script>
我閱讀了有關緩存清單的信息,並進行了嘗試,但是盡管感覺像它想工作一樣,但它也不會更新頁面,直到我轉到chrome:// appcache-internals並刪除文件為止。
CACHE MANIFEST /calendar.php /css/style.css
PHP或Javascript標頭都不起作用,因為它們要么不會在重新訪問時更新文件,要么根本就不會保存任何文件。
header("Cache-Control: no-cache, must-revalidate");
<meta http-equiv="Cache-Control" content="no-store" />
據我所知,無法手動刪除用戶的網站緩存並重新下載,並且一旦保存了緩存,就無法強制對其進行更新。 如果您將其設置為過期,那么就無法訪問它,並且您不知道他們下一次何時可以更新連接,因此我將繞圈走。
我已經嘗試了好幾個小時,找到了行之有效的方法,並且不敢相信這並非一件容易的事,因此,我現在正全力以赴地請各位優秀的編碼人員為我指出正確的方向,老板把我從一樓的窗戶上吊下來。
非常感謝
更新
以Clarence所說的作為起點,我在appcache文件中想到了以下代碼:
CACHE MANIFEST CACHE: /css/bootstrap.css /css/style.css /calendar.php NETWORK: /calendar.php # UPDATED: 03-04-2018 15:55:57
它的作用是緩存Calendar.php文件,但如果存在連接,則它會再次查看NETWORK標題下的那些文件,因此我也將其放在了那里。 如果appcache文件沒有更改,則瀏覽器不會打擾您,因此在更改作業后,我使用以下代碼將文件寫入文件:
$manifest = file_get_contents(__DIR__ . '/cache.appcache'); $newFile = substr($manifest, 0, (strpos($manifest, '# UPDATED: ') + 11)); $newFile = $newFile . date('dmY H:i:s'); file_put_contents('cache.appcache', $newFile);
基本上只在文件中搜索“ UPDATED”並插入新的時間,從而更新文件並需要返回用戶的重新檢查。
可能有人指出這不是正確的方法,但從我的測試來看似乎可行,因此要感謝那些貢獻者。
最好的選擇是創建PWA。 這應該包括清單文件和服務工作者 。 它使您可以緩存網站的內容,並在重新建立連接后對其進行更新。 然而,這是非常新的,需要對服務人員進行大量研究。 如果您需要有關PWA開發的任何幫助,將在一定程度上樂於幫助您
每當更改文件之一時,您是否嘗試過更改緩存清單的內容? 關於文件更改,APPCACHE有點挑剔,可能會很麻煩。 我通常會在注釋中添加時間戳和版本號,以強制其在瀏覽器中進行更新,如下所示:
CACHE MANIFEST
# 01-01-2001 v1.0 (Change whenever you need to force an update of the cache)
CACHE:
/css/file.css
/js/file.js
NETWORK:
*
FALLBACK:
沒有HTTP-Header
的唯一方法是連續重命名文件。
以及相關的HTML tag
文件名。
因此,文件將重新加載。
使用HTTP-Header
請看這里。
只要在日歷中進行了新的更改,就可以執行此操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.