27

我正在使用 JQTouch 使用元标记“apple-mobile-web-app-capable”在主屏幕上创建一个 Web 应用程序,但无论我从设置中清除缓存多少次,Web 应用程序的 Javascript 仍然是较旧的缓存版本。

奇怪的是,如果我将元标记的内容设置为;

<meta name="apple-mobile-web-app-capable" content="no" />

...然后将 Web 应用程序添加到主屏幕,当我启动它时,我会得到最新版本。

但是,如果我将元标记设置为;

<meta name="apple-mobile-web-app-capable" content="yes" />

...然后将 Web 应用程序添加到主屏幕,我得到较旧的缓存版本。

PS。我可以确认这只是不会刷新的javascript 。

4

6 回答 6

20

您可以尝试在 js 包含的 src 属性的末尾添加一个唯一字符串(例如,使用时间戳)。请记住,您必须为每次要执行的刷新更改此唯一字符串,因此您可能需要考虑进行延迟加载(这本身可能会解决您的问题): <script type="text/javascript" src="myScript.js?012345"></script>

这通常会强制浏览器获取最新版本的脚本。可能工作...

于 2011-11-22T10:35:01.900 回答
2

这是一种对我来说完全清除缓存的方法:

1-删除 Safari 中存在您的应用程序的选项卡。
2-删除主屏幕中应用程序的图标。
3-从记忆中杀死safari。
4-转到设置/野生动物园并按清除缓存。
5-如果您想确保它可以正常工作,您可以重新启动您的 iPhone/iPod

于 2012-06-15T17:06:22.193 回答
1

我发现在 ASP.NET MVC中使用捆绑功能为我解决了这个问题。

它会自动生成以下形式的捆绑链接:

http://www.domain.com/MvcBM_time/bundles/AllMyScripts?v=r0sLDicvP58AIXN_mc3QdyVvVj5euZNzdsa2N1PKvb81

如果捆绑包中的任何文件发生更改,则 v= 之后的令牌会更改,从而保证浏览器对捆绑包的请求将获得最新的捆绑包。

于 2013-07-19T03:52:46.427 回答
0

如果您已越狱,只需在终端中执行此操作

rm ./Library/Caches/com.apple.webapp/Cache.db
于 2012-08-19T05:25:09.173 回答
0

根据 SquareFeet 所说的,每次都可以使用 PHP 自动将新文件拉下,并在文件名后附加一个唯一的 GET 标记。例如:

<link rel="stylesheet" type="text/css" href="/css/global.css?
   <?php echo(mt_rand(10000000, 99999999)); ?>
" />

理论上,可以使用 JavaScript 完成相同的任务,尽管对 Web 服务器进行了一些修改:

<link rel="stylesheet" type="text/css" href="/css/global.css?
   <div id="id"></div>
" />

<script language="Javascript" type="text/javascript">
   document.getElementById("id").innerHTML = Math.floor((Math.random() * 10000) + 1);
</script>
于 2014-08-08T15:03:12.053 回答
0

这让我彻底疯了。我尝试杀死 Safari,清除缓存,切换到私人模式,并从主屏幕中删除 Web 应用程序。这些都不起作用,但起作用的是在 Safari 本身中临时加载 Web 应用程序页面并重新加载.

如果您使用添加到主屏幕,您可以将 ?web_app_ready=1 添加到安装 URL。由于这不是最终用户过程,因此向每个脚本(上面的答案)添加查询字符串可能对非开发人员环境更有效。

于 2013-11-07T01:18:01.217 回答