下午全部,
一些背景知识 - 我正在为可以安排工作的公司构建自定义日历,工程师可以通过手机访问它,以了解他们的工作时间和地点。他们之前使用的是谷歌日历,但现在想要一些定制的东西。
一切都很好,直到有人丢失手机信号并在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('d-m-Y H:i:s');
file_put_contents('cache.appcache', $newFile);
基本上只搜索文件“UPDATED”并插入新时间,从而更新文件并要求返回用户重新检查。
有人可能会指出这不是正确的方法,但似乎从我的测试中起作用,所以要感谢那些贡献的人。
答案 0 :(得分:0)
最好的选择是创建PWA。这应该包括清单文件和服务工作者。它使您可以缓存网站的内容,并在重新建立连接后更新它。然而,这是非常新的,需要对服务工作者进行大量的研究。如果您需要任何有关PWA开发的帮助,我们将很乐意帮助达到某种程度
答案 1 :(得分:0)
您是否尝试在更改其中一个文件时更改缓存清单的内容? APPCACHE在文件更改方面有点挑剔,处理起来很麻烦。我通常包含一个带有时间戳和版本号的注释,以强制它在浏览器中更新,如下所示:
Item
====
ItemID
ItemName
Entity
====
EntityID
Period
ItemEntity
==========
ItemEntity_ID
ItemID
EntityID
答案 2 :(得分:0)
没有HTTP-Header
的唯一方法是连续重命名文件。
依赖HTML tag
文件名。
所以文件重新加载。
HTTP-Header
看这里。
How to control web page caching, across all browsers?
只要日历中有新的更改,您就可以执行此操作。