为啥我的 Mobile Safari 缓存不会清除?

Posted

技术标签:

【中文标题】为啥我的 Mobile Safari 缓存不会清除?【英文标题】:Why my Mobile Safari cache won't clear?为什么我的 Mobile Safari 缓存不会清除? 【发布时间】:2012-07-30 01:22:43 【问题描述】:

我正在尝试在我的 iPhone4 (ios4) iPad1 (iOS3.3) 和桌面上调试网站。

我的问题是我根本无法清除 iPhone 缓存。

如果我将警报/控制台添加到我正在调试的 js 文件中,它们会显示在 iPad 和桌面上,但 iPhone 只是不断地从缓存中重新加载。

如果我通过settings>safari>delete browser history, cache, cookies 清除缓存并在 Safari 中删除所有书签并删除服务器、iPad 和桌面中断(丢失文件)上的文件,但 iPhone 仍然加载页面,就好像什么都没发生一样。

不确定这是问问题的正确地方,但也许其他人有类似的经历和想法如何解决?

谢谢!

编辑: 我又玩了一些。如果我通过图标启动应用程序,缓存似乎已清除。只有当我在 Mobile Safari 中打开页面时,它仍然使用缓存中的错误文件。仍然欢迎指点!

编辑: 我正在为此开始赏金。我在网站上使用 RequireJS 和 JqueryMobile,所以这些也可能是缓存未清除的原因。不过,我不明白为什么它在应用程序模式下会清除,以及为什么在 Mobile Safari 中不会清除。

我尝试了以下方法: 1、点击网址栏中的reload page不会清除缓存。单击链接然后通过go 加载页面似乎确实偶尔会清除缓存

【问题讨论】:

我还没有真正使用缓存清单,但是您可以使用缓存清单的NETWORK 部分来指定您的文件应该在每次页面加载时刷新吗?或者将时间戳附加到您想要确保不被缓存的资产的 URL 上呢?或者也许您可以为您不想被缓存的资产设置一个Cache-Control: no-cache, must-revalidate 标头?设置为过去的Expires 标头是另一种尝试。介意我问一下您不想缓存哪些特定文件? 您是否尝试在“设置”中清除缓存,然后按住睡眠/唤醒和主页按钮(硬关闭您的 iPhone)?当我这样做然后重新启动 iPhone 时,终于刷新了缓存。 @JaredUpdike:前段时间,但我想我也试过这个。感谢您的参与 【参考方案1】:

尽管这有点 hacky,但也许可以尝试一下这个解决方法(我假设这是为了开发)

根据此处How to disable Ajax caching in Safari browser? 禁用 ajax 缓存的注释,您可以在开发时设置无缓存标头,或者像这样在纯 html 中设置

<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Expires" CONTENT="-1">

显然它不会解决您最初被卡住的问题。但是您可以通过添加任意查询参数 ?something=3164 来打破循环,因此 URL 实际上是唯一的。然后下次加载时,希望它会保留无缓存参数。

如果即使这样也不起作用,您可以设置一个书签,每次将您重定向到不同的 random=14361 号码,因为它们都是有效的唯一呼叫 - 但是我们进入了愚蠢的领域!

我希望有一个合适的解决方案,但是当我开发 JS webapps 时,我发现有时一切都正确刷新了一段时间,然后有时它不会......我无法分辨出真正的模式 - 除了事实上,我认为启用调试器时它似乎做得更少(但这完全没有证据;-)

【讨论】:

好的。尝试这个。我仍在等待正确刷新的阶段... :-) 是 url.com/?something=13647(每次不同的数字)不起作用?还是 html 文件正在刷新但您的资产不是?您也可以向它们添加查询字符串吗? (然后在您的服务器上为它们配置无缓存) 不,我的评论是指您说“有时一切都会在一段时间内正常刷新,但有时却不会”。对我来说,它似乎永远不会起作用。需要一点来尝试您的建议 虽然很荒谬,但 URL 中的随机数是 10.12 上唯一对我有用的 Safari。【参考方案2】:

在 iOS 移动端开发时,您可以通过 USB 将手机插入电脑并使用开发工具轻松清除缓存:

    在手机中,开启开发工具:设置/Safari/高级 在电脑中,启用 Safari 开发菜单:设置/高级 确保移动版 Safari 已打开并检查手机:Develop/PHONE_NAME/TAB_NAME 现在按 cmd-shift-r 清除手机缓存

【讨论】:

啊。从来没有听说过。好的!下次试试。 现在是 cmd-option-r 清除 Safari 开发者工具中的手机缓存。 由于某种原因,根据网络 cmd-option-r 实际上并没有为我清除缓存。然而,现在 safari devtools 网络页面的右上角有一个小按钮,可让您禁用缓存并且有效【参考方案3】:

尝试停止 safari 并重新启动它并删除 safari 中的所有页面....查看图片如何关闭页面

【讨论】:

好主意。已删除页面。 Webserver 我必须检查是否可以重新启动。可能需要一段时间,但我会回帖。网络服务器不应该是原因,因为它可以向 iPad 和桌面提供一切。 请尝试一下,如果您接受答案,我会自动知道;) 您知道问题出在哪里... javascript 已关闭。 JS 没有加载,没有控制台,看起来缓存不会清除。肯定在这上面浪费了一些生命......无论如何。我检查了,因为你的提示很好。 对不起,我取消选中。这实在是太麻烦了。我会发布赏金。如果我没有得到更好的答案,那么你也会得到赏金。【参考方案4】:

您正在与HTML5 "offline" application 打交道吗?离线应用程序清单文件的使用是相当新的,每个浏览器都有奇怪的怪癖。修改服务器上的 manifest 文件,iPhone 应该会重新获取页面。

编辑: 如果您曾经有一个清单文件(以及指向它的 HTML 属性),如果您以错误的顺序删除清单,您的缓存可能会变得混乱:

    存在 HTML 和清单 删除清单文件,然后重新加载 HTML 页面 => HTML 页面应该取消清单,因为清单 404,但在某些浏览器上没有。 修改 HTML => HTML 页面不会取消缓存,因为(不存在的)清单文件没有更改。

要正确取消显示它,请尝试:

    重新添加 HTML 和清单 先移除 HTML manifest 属性,然后重新加载页面 然后从服务器中删除清单文件。

【讨论】:

我还没有使用清单,所以我可以安全地排除这是原因。谢谢你的回答,以后可能会派上用场 还没用?你有没有在你的网站测试中有一个在线清单文件?如果是这样,在某些情况下,页面可能会表现得像它仍然存在一样。 这可能是...一开始我的清单是空的,但后来...由于它是空的,因此无法从中重新加载页面。 查看我上面的编辑以解决一个简单的清单错误;如果您对清单文件做了任何独特的事情,它可能不会那么简单,但它应该让您朝着正确的方向前进。【参考方案5】:

还有另一种解决方案,无需重新启动设备进行 safari,

    转到Settings 然后下楼去Safari

    然后下去看看选项Clear Cookie and Data如下图

    现在回到你的狩猎之旅,你就完成了!

如果您在下面还有任何问题评论。

【讨论】:

该选项不会完全清除外部文件JS/CSS的缓存。

以上是关于为啥我的 Mobile Safari 缓存不会清除?的主要内容,如果未能解决你的问题,请参考以下文章

为啥在 iOS Safari Mobile (iPhone / iPad) 中没有触发模糊事件?

为啥 Safari Mobile 中无法播放网络音频 api 振荡器?

为啥我的视频无法在 Safari 浏览器中播放?

为啥 Safari Mobile 在 iOS 8 上处理许多输入字段时遇到问题

如果我不清除缓存,为啥我的 Flask 应用程序不呈现 CSS?

Appium和iOS Mobile Safari自动化,能做到吗?