你如何强制iPad主屏幕书签的web应用程序刷新?

M M*_*rsh 29 caching homescreen ipad

我遇到了一个问题,我将一个网络应用程序添加到我的iPad主屏幕(iOS 5.0.1 iPad 2),当我打开它时,它似乎是在幕后缓存一些东西,独立于Safari.

我已经清除了设置(清除历史记录和清除Cookie和数据)中提供的Safari中的所有内容,当我使用Safari导航到Web应用程序时,我看到应用程序处于当前状态.但是,如果我打开主屏幕书签,我会让应用程序处于预先更改状态.

我已经看到很多关于使用cache.manifest来缓存资源以供离线使用的信息,但是我不确定这是否与此相关,因为我想完全相反:什么都不缓存.

我已经达到了甚至没有测试外部资源的程度; 如果我在index.html的body元素中更改了一些任意测试字符串,则主屏幕书签不会显示更新的文本.

Hen*_*rik 24

另一种解决方法是在您的Javascript和CSS链接中添加?v = 1.例如:

<link rel="stylesheet" type="text/css" media="all" href="./css/ipad.css?v=1">    
<script src="./js/ipad.js?v=1"></script>
Run Code Online (Sandbox Code Playgroud)

据我所知,当文件发生变化时,似乎没有必要更新数字.显然,在安装了最新软件更新的iPad 2上,仅仅暗示一些动态的东西就足够了.


tho*_*les 11

创建一个cache.manifest指示它永远不会缓存主html页面引用的资源:

CACHE MANIFEST

# Version 1.0000

NETWORK:
*
Run Code Online (Sandbox Code Playgroud)

在你的使用中index.html:

<!DOCTYPE html>
<html manifest="cache.manifest">
Run Code Online (Sandbox Code Playgroud)

现在,每当您更改该清单文件时 - 例如,通过增加该注释中的版本号 - 浏览器也将重新下载index.html.

确保在更新缓存时重新加载页面:

<script>
function updateSite(event) {
    window.location.reload();
}
window.applicationCache.addEventListener('updateready', updateSite, false);
</script>
Run Code Online (Sandbox Code Playgroud)

Safari开发者库具有良好的文档.

  • 这可能有效,但在此之前,在ipad看到这个新清单之前,必须至少进行一次重新加载.必须以某种方式触发重新加载,并且简单地更改服务器端的某些内容对于ipad决定所有内容永远不会从服务器加载任何东西都没有帮助 - 默认情况下就是这种情况. (3认同)
  • 我必须调用“window.location.reload(true)”来强制绕过缓存。没有“true”它就不起作用。 (2认同)
  • 这超级有帮助!这确实应该是公认的答案。 (2认同)

小智 5

我想我找到了一个解决方法:

仅当index.html文件更改时,才会显示该站点的新版本.
(要加载的第一个文件)

如果您离开index.html并且仅更改其他文件中的某些js,则该站点不会加载新版本.

  • 不为我刷新CSS文件. (3认同)

Rab*_*abi 5

对于我们的iOS网络剪辑应用,我们使用以下内容.到目前为止没有缓存问题:

1-我们有一个名为'manifest.appcache.php'的缓存清单文件

<?php
    header("Cache-Control: max-age=0, no-cache, no-store, must-revalidate");
    header("Pragma: no-cache");
    header("Expires: Thu, 01 Jan 1970 00:00:01 GMT");
    header('Content-type: text/cache-manifest'); 
?>

CACHE MANIFEST

CACHE:
# Don't cache anything
FALLBACK:
# Nothing
NETWORK:
# Request everything from server
*
Run Code Online (Sandbox Code Playgroud)

2 - 在HTML文件中,我们有:

<!DOCTYPE html>
<html lang="en" manifest="manifest.appcache.php">
    <head>
...
Run Code Online (Sandbox Code Playgroud)

  • 对我不起作用.我的CSS更新未被检索. (3认同)